Releases: Elastic-Suite/gally
v2.2.1
v2.2.0
New features
Add configuration management from Gally's BO
This release introduces a configuration system that allows administrators to manage Gally settings directly from the back office. Each configuration value can now be defined at different scopes (locale, localizedCatalog, ...), providing greater flexibility and control over how Gally behaves across multiple contexts.
Add user management from Gally's BO
Administrators can now manage Gally users directly from the back office, including creating, editing, and deactivating accounts. This update also introduces a built-in password reset system, allowing users to securely reset their credentials through the interface without external intervention.
End-to-End Testing Integration
A new end-to-end testing system powered by Playwright has been integrated into the CI pipeline. This addition enhances release reliability by automatically validating key user flows and ensuring consistent quality across updates.
todo
New facet sorting option
Facets can now be sorted not only in ascending alphabetical order but also in descending or natural order. This improvement gives administrators more control over how facet values are displayed.
💎 Date Attribute Support in Rule Engine premium
The rule engine now supports date-type attributes, enabling more advanced and flexible conditions based on dates. This allows administrators to create rules that take temporal data into account directly within the back office.
📦 Features
- [Docker] Add configurable http port in React config by @PierreGauthier in #676
- [Configuration] Update configuration api by @PierreGauthier in #689
- [User] Add user management from Gally's BO by @botisSmile in #690 #710 #711 #712 #714 #715 #708
- [Test E2E] Add e2e tests and add the service that lauches them i… by @matthias-goupil in #638
🐛 Fixes
- [PSH] Clear varnish on deploy by @PierreGauthier in #675
- [Docker] Fix zombie processes related to the healthcheck on search container by @botisSmile in #720
🔨 Quality
- Add pagination helper class by @matthias-goupil in #673
- [Ionicon] Remove ionicon imports from pwa by @matthias-goupil in #674
- [FrontWorkspaces] Build with workspaces by @botisSmile in #671
- [Tests E2E] Add test ids helper by @kerwan in #682
- [Tests E2E] Correct config when using non default ports by @kerwan in #686
- [Tests E2E] Add basics tests by @matthias-goupil in #685
- [Tests E2E] Run test as roles by @kerwan in #692
- [Tests E2E] Fix sort order test by @PierreGauthier in #704
- [Tests E2E] Add optional filter to the makefile command by @kerwan in #703
- [Tests E2E] Fix incorrect tests after config field change by @kerwan in #716
- [Tests E2E] Settings scope test by @kerwan in #693
- [Tests E2E] Add yarn commands to run e2e tests in CI by @kerwan & @botisSmile in #718
- [Tests E2E] Split test into standard and premium specific sections by @kerwan in #721 #717 #723
- [Tests E2E] Wrong comment in playwright config file by @kerwan in #722
- [Tests E2E] Fix facet test by @PierreGauthier in #706
- [Tests E2E] Update localized catalog list in e2e tests by @PierreGauthier in #697
- [Install] Transform install data from fixture to migration by @PierreGauthier in #688
- [Node] Fix node version by @PierreGauthier in #696
- [Fixtures] Feat fixture2migration by @PierreGauthier in #695
- [Test] Increase unit test memory limit by @PierreGauthier in #698
- [Docker] Fix redis and router configurations by @botisSmile in #702
- [Docker] Update redis image reference by @botisSmile in #709 #726
- [Example app] PUBLIC_URL not set by @botisSmile in #707
- [Docker] Update redis image reference by @PierreGauthier in #719
Full Changelog: v2.1.0...v2.2.0
v2.1.0
New features
Define analyzer by source field
You can now override the analyzer used by OpenSearch for indexing and searching a specific field directly from the search configuration screen.
This update introduces a new prebuilt analyzer: standard_edge_ngram. Its purpose is to generate n-grams for the field's value, enabling partial matches during searches.
Eg: if a field has the value "Organic Cotton", the generated n-grams will be: "org", "orga", "organ", "organi", "organic", "cot", "cott", "cotto", "cotton".
Therefore, searching for "org" or "cot" in Front-office will allow the products having the value "Organic cotton" to be shown.
Note: Please keep in mind that this feature is not meant to be enabled on all attributes, and that it's not recommended to enable it on long text fields (description, etc...) because of the noise and the performance issues it can generates with such fields.
💎 Proportional Boosts premium
Introducing field value-based boosts, a new type of boost that applies a linear/proportional scoring based on the value of a numeric or decimal attribute.
This feature is designed exclusively for numeric or decimal fields and enables dynamic relevance scoring depending on the field's value.
New field type: File
A new File field type has been added to Gally. You can now send file content as a base64-encoded string as the value of a field.
OpenSearch will automatically extract text content from the file using the Apache Tika library via its ingest attachment plugin.
Span Queries
A new configuration column has been added with a toggle "Use for span queries".
In Gally's full-text search, this enables span queries — a mechanism that gives higher relevance scores to documents where the searched terms appear closer together in the text.
Example:
Consider the following two products:
SKU Name Description AAA Lorena Cardigan The Lorena Cardigan is a simple way to dress up any outfit while remaining comfortable. Wide sleeves provide ease of movement while the back offers beautiful inset summer detail. BBB Petra Flowers The Petra flowers is a summer dress that strikes a delightful balance between fun and functional. The easy style of this dress lends itself to relaxing and having a good time. Put your hands in the pockets and just chill. If a user searches for "summer dress", both products will match because both terms appear in the descriptions.
However, with span queries enabled, product BBB will receive a higher score because the terms "summer" and "dress" are closer to each other in the text.
New request product_category_count
We add a new request type in the product search api : product_category_count.
This will help you to get the number of product by category from Gally.
Performance Improvements
We optimized Doctrine SQL queries and cache managment to minimize the number of database calls, resulting in significantly faster response times.
📦 Features
- [Deployment] Adding Upsun & PlatformSh deployment config by @romainruaud & @PierreGauthier in #628 #647 #667
- [Opensearch] Add ingest-attachment plugin by @PierreGauthier in #649
- [Docker] Implementing Gally in a single container by @romainruaud in #658
🐛 Fixes
- [Example App] Price slider blinking and add range value by @matthias-goupil in #654
- [CORS] Fix nelmio_cors config and env variable CORS_ALLOW_ORIGIN not corectly configured in compose.yml by @botisSmile in #652
- [SSL] Fix certbot volume for renewal by @romainruaud in #655
- [Deployment] Fix delivery workflow, add parenthesis on OR conditions to avoid the skipping of errors in AND conditions and move 'generate-keypair' to the end to avoid building of a wrong Docker images by @botisSmile in #662
🔨 Quality
- [Env] Create lexik key on first deploy by @PierreGauthier in #643
- [Env] Close ports and add traefik labels by @PierreGauthier in #644
- [Env] Give the possibility to disable varnish by @botisSmile in #648
- [Env] Update php Dockerfile to copy folder public to php_static_files from skipping of errors in AND conditions and move 'generate-keypair' to the end to avoid building of a wrong Docker images by @botisSmile in #645
- [Env] Rollback Opensearch to single-node by @romainruaud in #656
- [Env] Fix Elasticsearch build by @shochdoerfer in #660
- [Env] Disable deprecation logs in prod mode by @botisSmile in #663
- [Env] Exclude from prod's logs the channel 'deprecation' by @botisSmile in #665
- [Env] Fix traefik labels in order to allow multiple gally instance running by @PierreGauthier in #670
- [Env] Set default api route prefix to 'api' by @botisSmile in #659 #666
- [Deploy] Add parameter for sample data in deploy script by @PierreGauthier in #646
- [Menu] Rename 'Catalog Structure' to 'Results' by @botisSmile in #651
- [CI] Update github action version by @PierreGauthier in #668
Full Changelog: 2.0.0...v2.1.0
v2.0.0
New features
Update to API Platform 3.4
We’re excited to announce that Gally has been upgraded to use API Platform 3.4. This major update makes the platform more robust, secure, and performant, ensuring it continues to meet your needs reliably and efficiently.
Key Changes and Improvements:
-
Compatibility with API Platform 3.4 Features:
- Support for new metadata attributes and improved configuration options.
- Enhanced management of API inputs and schema (OpenAPI 3.1 supported).
-
Performance Enhancements:
- Optimized query handling for search endpoints, delivering faster response times.
- Reduced latency through the utilization of API Platform 3.4's internal optimizations.
-
Simplified Configuration:
- Adoption of the new conventions introduced in API Platform 3.4 for a more intuitive setup.
- Refactored services for improved maintainability.
-
Enhanced Security:
- Updated critical dependencies.
- Integration of the latest security best practices recommended by API Platform.
User Benefits:
- Faster and more accurate search results: The new implementation boosts the performance of complex queries.
- Improved stability and compatibility: Fewer bugs and easier integration with other systems.
- Increased scalability: Ready for future updates thanks to a modernized architecture.
Date and Location source fields
You can now manage date and location source fields, enabling you to contribute and easily filter on these new types.
📦 Features
- [Platform.sh] Adding platformsh configuration files. by @romainruaud in #611
- [Source Field] Manage location attribute - skateboard by @matthias-goupil in #616
- [Example app] Use 'in' operator in facets for date and location attributes by @botisSmile in #634
- [Example App] Add latitude and Longitude Field in a S… by @matthias-goupil in #632
🐛 Fixes
- [Example App] Add current category on viewMoreProductF… by @botisSmile in #607
- [Env] Fix Server name and Discard varnish from API-Platform configuration i… by @PierreGauthier in #614
- [Docker] #1303328 - Fix install prod mode by @PierreGauthier in #613
- [Example App] Reset SearchBar when I navigate on the d… by @matthias-goupil in #618
- [Example App] Pagination is not reset by @matthias-goupil in #617
🔨 Quality
- [VectorSearch] Reload model after deployment by @PierreGauthier in #592
- [Connector] Add conf for connectors dev env by @PierreGauthier in #595
- [Makefile] Add varnish flush after fixtures load by @PierreGauthier in #608
- [Example App] Allow to refresh by @matthias-goupil in #610
- [Example App] Center SearchBar by @matthias-goupil in #609
- [Platform.sh] Disable PSH cache and disable VectorSearch module on PSH until they i… by @romainruaud in #615
- [Pacakages] remove dayjs from depandencies by @matthias-goupil in #612
- [Docker] Add Certbot init docker stack by @botisSmile in #619
- [Deploy] Delivery int workflow to init certs in the right moment by @botisSmile in #620
- [Deploy] Delivery int workflow certs path by @botisSmile in #621
- [Deploy] Delivery int workflow to init certs paths by @botisSmile in #622
- [Deploy] Delivery int workflow, add cache flush by @botisSmile in #623
- [Composer ] Update 'symfony/cache' package version to v6.4.12 to be compatio… by @botisSmile in #624
- [Deploy] Fixes on intergration deployment by @botisSmile in #625
- [Docker] php Dockerfile by @botisSmile in #626
- [Docker] path of the jwt_keys volume by @botisSmile in #627
- [Docker] Avoid to generate database container with wrong password "!Chang… by @botisSmile in #629
- [Deploy] Update delivery time for 1.3.x by @botisSmile in #630
- [Docker] Add NEXT_PUBLIC_API_ROUTE_PREFIX in pwa docker service by @botisSmile in #631
- [Deploy] Add parameter to keep alive the ssh connection during the delivery by @botisSmile in #633
- [Docker] NEXT_PUBLIC_API_ROUTE_PREFIX not set during the pwa image building by @botisSmile in #635
- [Docker] Remove API_SERVER_NAME from compose files and some configs by @botisSmile in #637
- [Docker] Don't check opensearch SSL by default by @PierreGauthier in #636
- [Docker] Fix API_ROUTE_PREFIX and remove useless setfacl call by @botisSmile in #639
- [Docker] Fix API_ROUTE_PREFIX compose.override.yml by @botisSmile in #640
- [Composer] Update gally/gally-standard composer package by @botisSmile in #641
Full Changelog: 1.3.1...2.0.0
v 1.3.1
New features
Attributes in autocomplete
A new configuration allows merchants to show attribute in the autocomplete results:
If you search for some product, the autocomplete response will contain some attributes in order to help users to find the product they are searching for more easily by pre-filtered the result page:
💎 Explain details premium
In the previous version we released a new page in the gally backoffice where marchant can preview the results of their configuration. In this version we add the possibility to show the details of how the score of each product has been computed.
💎 Use external model premium
Vector search congfiguration has been improve in order to allow the usage of external large language models (such as the one provided by OpenAI, Cohere or MistralAi) :
gally_vector_search:
llm_model:
name: miniLM_remote_v17
format: REMOTE
version: '2'
config:
model_type: bert
embedding_dimension: 384
framework_type: sentence_transformers
connector:
name: test_connector_model_remote_116
version: 1
protocol: http
parameters:
endpoint: api-inference.huggingface.co
credential:
huggingface_token: 'XXX'
actions:
- action_type: predict
method: POST
url: https://${parameters.endpoint}/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2
headers:
Authorization: 'Bearer ${credential.huggingface_token}'
request_body: '{ "inputs": ${parameters.inputs} }'
pre_process_function: 'String first = params.text_docs[0]; return "{ \"parameters\":{\"inputs\":[\"" + first + "\"]}}";'
post_process_function: 'def shape = [params.result[0].length]; return "{\"name\": \"sentence_embedding\", \"data_type\": \"FLOAT32\", \"shape\": " + shape + ", \"data\": " + params.result[0] + " }"'
trusted_endpoints:
- "^https://api-inference\\.huggingface\\.co/.*$"📦 Features
- [Explain] Move definition of 'gally-font' in body tag by @botisSmile in #601
- [VectorSearch] Auto deploy model by @botisSmile & @PierreGauthier in #596 #597 #599 #600
- [VectorSearch] Update opensearch and update cluster configuration for memory management by @PierreGauthier in #602
- [Architecture] Make redis cache server configurable by @botisSmile in #603
- [Autocomplete] Autocomplete attributs by @matthias-goupil in #604
- [Example App] Don't use is_active attribute on categor… by @botisSmile in #606
🔨 Quality
- [Makefile] Set default version in init-dev-env by @PierreGauthier in #598
- [CI] Fix clean useless docker volume by @PierreGauthier in #605
New Contributors
- @matthias-goupil made their first contribution in #604
Full Changelog: 1.3.0...1.3.1
v 1.3.0
New features
Boost preview premium
In the boost contribution page, you can now have a preview of the effect of the boost you are creating. You will be able to see how the boost affect your product score and how the position of the product evolves after the application of this boost.
Explain premium
A new menu has been added to the gally backoffice. It allows user to visualize the results of a given context (a product search or a category product listing). This will help merchants to understand why some products are at a certain position by displaying their document score and highlight the product that are manually positioned.
Vector Search premium
A new endpoint has been added to the graphQl schema in order use the OpenSearch ability to do semantic search. In short, a vector that represent your document will be computed by a LLM (Large Language Model) during the indexation of your data based on you configuration. When a user will search data on your website, it's search query will be also computed as a vector and the search engine will return all the document that are semantically close to the search query instead of the results that match the words of the search query (like a classical search engine will do).
Configuration
A default model have been configured in the gally_vector_search.yaml, you can update this configuration to change this model by any PyToch or ONNX embedding model.
gally_vector_search:
llm_model:
name: 'huggingface/sentence-transformers/all-MiniLM-L12-v2'
version: 1.0.1
format: ONNX
...The screen in the screenshot aboveallow you to compute a dynamic field on each product which will be used by the LLM to calculate the vector for this product.
The field "Vectorisable" indicate which field we want to include in vector computation.
The field "Position" indicate in which order we want to include these fields.
And the field "prompt" allow you to create a short sentence where the field value will be inserted at the position of the @%s@ placeholder.
For exemple if you have a product with these data :
name: My Product
sku: AAA
description: An incredible product
price: 75€
With the above configuration, the vector will be calculated from a dynamic field with the value : The product's name is: My Product and this is its description : An incredible product.
Usage
A new GraphQl endpoint has been added in the api : vectorSearchDocuments.
It needs the same parameter as the documents endpoint, but it will run a semantic search instead a fulltext search.
A new screen has been added to the example app in order to be able to compare results from these two search approaches.
📦 Features
- [Explain] Add explain page in Gally by @botisSmile in #586
- [Search engine] Switch to OpenSearch 2 by @PierreGauthier in #578
- [VectorSearch] Add compaison page between vector search and fulltext search in example app @PierreGauthier in #589 #591
🔨 Quality
- [CI] Update cs-fixer command to avoid running docker compose from a sub directory @PierreGauthier in #588
- [Symfony] Update composer version of symfony/flex to 1.21.5 by @botisSmile in #590
Full Changelog: 1.2.0...1.3.0
v 1.2.0
New features
Autocomplete
In the example App, the autocomplete feature has been added for products and categories.
Search on CMS pages
In the example App, the search on "CMS pages" entity has been added.
Thesaurus
In the premium version, you can now add synonyms and expansions to improve the search results according to your business.
📦 Features
- [Thesaurus] Merge thesauruses on master by @botisSmile in #574
- [Search] [Autocomplete] feat #1243475 Autocomplete by @botisSmile in #558
- [Search] [CMS] #1214071 Add possibility to search on CMS pages by @botisSmile in #579
- [Versions] feat: #1265689 update front package versions to '~1.2.0-alpha.8' by @botisSmile in #583
🔨 Quality
- [CI] Feat deploy sylius demo by @PierreGauthier in #581
- [CI] Fix deploy demo by @botisSmile in #567
- [CI] Fix deploy demo, fix github workflow syntax by @botisSmile in #568
- [CI] Fix deploy demo by @botisSmile in #569
- [CI] Switch form packgist.smie.fr to elasticsuite.repo.packagist.com via a… by @botisSmile in #570
- [CI] Add PACKAGIST_URL secret on deploy 1.x.x workflows by @botisSmile in #571
- [CI] Add PACKAGIST_URL secret on deploy workflows by @botisSmile in #572
- [CI] Reconfigure CI workflow for master by @botisSmile in #573
- [CI] Deploy to shopware demo from Github by @PierreGauthier in #575
- [CI] Increase memory limit for tests by @PierreGauthier in #580
- [CI] Fix icon-material timeout on Yarn install by @PierreGauthier in #582
Full Changelog: 1.1.0...1.2.0
v 1.1.0
What's Changed
- ESPP-668 Refacto deploy action by @botisSmile in #509
- Revert "ESPP-668 Refacto deploy action" by @botisSmile in #512
- Add beberlei/doctrineextensions composer package by @botisSmile in #542
- Update front version of Gally packages on master by @botisSmile in #544
- Update @elastic-suite/gally-admin-shared version on example-app to main by @botisSmile in #551
- "Merge" Feature boost on master by @botisSmile in #543
- #1242562 [Elasticsearch] Prevent automatic ES requests during model A… by @rbayet in #546
- Update gally front packages by @Adrien-Meynard in #552
- Set initial scale value by @botisSmile in #553
- [Github secret] Replace AWS_HOSTNAME_1_0_x by AWS_HOSTNAME_STABLE by @botisSmile in #559
- Update the deploy schedule of the 1.1.x integration by @botisSmile in #566
Full Changelog: 1.0.2...1.1.0
v 1.0.2
What's Changed
- Fix init-dev-env according to release managment by @PierreGauthier in #550
- #1229501 Set caddy vulcain version on api Dockerfile by @botisSmile in #554
- Fix deployment with fixed version in composer.json by @PierreGauthier in #555
- Update version of Gally packages to 1.0.2 by @PierreGauthier in #556
Full Changelog: 1.0.1...1.0.2
v 1.0.1
What's Changed
- Espp 619 app example show more by @Ponefar in #507
- Feat espp 668 integration environments 1.0.x by @botisSmile in #510 #511 #513
- ESPP-668 Github actions, removes dependency between delivery and test… by @botisSmile in #514
- ESPP-668 Refactor github actions by @botisSmile in #515 #516
- ESPP-668 Remove test branch on github actions by @botisSmile in #517
- Fix Makefile, change default branch on init-dev-env command by @botisSmile in #518
- ESPP-668 Add the possibility to skip the tests before the delivery by @botisSmile in #520 #521
- ESPP-668 Add chekout origin/branch_name on delivery process by @botisSmile in #522
- ESPP-668 Fix deploy-demo.yml, set the good 'back_branch' name by @botisSmile in #523
- Espp 686 app example image error url by @Ponefar in #508
- Add 'switch-dev-env' in make commands by @botisSmile in #524
- [Docker build] Update caddy version by @rbayet in #527
- Update url in install docs by @shochdoerfer in #526
- Feat 1196129 add boosts by @botisSmile in #525
- [Makefile] Fix php cs fixer command by @PierreGauthier in #528
- #1229501 Set explicitly mercure versions by @botisSmile in #536
- #1228809 [DockerFiles] Add 'yarn cache clean' on front images to redu… by @botisSmile in #535
- Update front version of Gally packages on 1.0.x by @botisSmile in #545
- Revert "Update front version of Gally packages on 1.0.x" by @botisSmile in #547
- Update version to 1.0.1 for all the gally packages in front and back by @botisSmile in #549
New Contributors
- @shochdoerfer made their first contribution in #526
Full Changelog: 1.0.0...1.0.1