v1.56.2 🐫
Meilisearch v1.56.2 removes a leftover debug statement that could impede performance and was a regression from v1.56.1. Upgrading from previous versions of Meilisearch is strongly recommended.
It also updates several dependencies.
- remove unwanted log & warn about future unwanted dbg by @dureuill in https://github.com/meilisearch/meilisearch/pull/6725
- Bump docker/build-push-action from 6.19.2 to 7.4.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6712
- Bump docker/login-action from 4.2.0 to 4.7.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6714
- Fix outdated CA certificates in the Docker images by @curquiza in https://github.com/meilisearch/meilisearch/pull/6705
- Bump actions/download-artifact from 8.0.1 to 8.0.2 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6713
- Bump dart-lang/setup-dart from 1.7.2 to 1.8.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6711
- Bump mongodb to v9.0 in rails SDKs tests by @Strift in https://github.com/meilisearch/meilisearch/pull/6716
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.56.1...v1.56.2
v1.55.1 🔭
Meilisearch v1.55.1 introduces important security fixes. Upgrading from v1.55.0 and earlier is recommended for all users.
See the release notes for Meilisearch v1.56.1 for details.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.55.0...v1.55.1
v1.56.1 🐫
Meilisearch v1.56.1 introduces important security fixes. Updating from v1.56.0 is recommended for all users.
-
Fix issue with ranking scores greater than 1 by @dureuill in https://github.com/meilisearch/meilisearch/pull/6703
-
Make sure that all nested fields are inserted in field id map by @dureuill in https://github.com/meilisearch/meilisearch/pull/6700
-
Fixes a panic when modifying the list of searchable attributes after an existing document has been updated to insert new nested fields.
-
Existing databases encountering this issue can be fixed by adding a new document containing the new nested fields.
-
Fixes #6636 and fixes #6657
-
- Fix the memory consumption and runtime of long filters by @dureuill in https://github.com/meilisearch/meilisearch/pull/6695
- Bump rustls from 0.23.45 to 0.23.46 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6706
- Clamp map_size to page size when removing tasks during snapshot creation by @mavrodikomsd-eng in https://github.com/meilisearch/meilisearch/pull/6699
- Reduce the number of cargo flaky iterations to 60 by @dureuill in https://github.com/meilisearch/meilisearch/pull/6689
- Fix Debian CI by @curquiza in https://github.com/meilisearch/meilisearch/pull/6698
- Bump mislav/bump-homebrew-formula-action from 3.6 to 4.2 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6567
- Bump actions/setup-node from 6.5.0 to 7.1.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6569
- Bump actions/setup-python from 6.3.0 to 7.1.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6570
- Bump actions/checkout from 5.1.0 to 7.0.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6568
- @mavrodikomsd-eng made their first contribution in https://github.com/meilisearch/meilisearch/pull/6699
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.56.0...v1.56.1
v1.56.0 🐫
- Introduce
sampledCountto compute the facet distribution by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6649 It is a new sorting option when retrieving the facet distribution. It is less precise than bycountbut provides a rough estimate of the facet distribution. Note that the count of documents for each facet is exhaustive but the list of facets is not and some facets that would have been listed by using the bycountmethod have been ignored/skipped. - Give up indexing when the embedder can't handle the load by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6681
- An adaptive strategy for rate limiting: For small usage with few documents, we accept a slow embedder service, and for big usage with updates containing thousands of documents, Meilisearch will give up early
- A better outage handling, where Meilisearch will give up early if the embedder server is unavailable for too long
- Support the
Retry-Afterheader when the value is in seconds, avoiding useless retries in a short timespan
- Optimization of general search performance by @itsamine27 in https://github.com/meilisearch/meilisearch/pull/6571
- Fix wrong binary quantization state after deleting embedders by @dureuill in https://github.com/meilisearch/meilisearch/pull/6679
- Improve code correctness by using the latest version of heed by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6687
- Update README by @mayasssh in https://github.com/meilisearch/meilisearch/pull/6692
- Disallow AI Contributions by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6684
- Fix empty request body section in the settings API reference by @curquiza in https://github.com/meilisearch/meilisearch/pull/6678
- Bump rustls from 0.23.43 to 0.23.45 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6672
v1.55.0 🔭
Apply an inline-specified dynamic search rule to a search query.
Search query objects in the following endpoints now have an additional, optional inlineRule parameter.
When present and not null, then Meilisearch will check if query satisfies the conditions of the dynamic search rule specified in inlineRule, and if so will apply the actions of the rule as if it had been sent to the PATCH /dynamicSearchRule/{:uid} endpoint.
Additionally, if the Meili-Include-Metadata header is present in the request with the value true, then the metadata in the response will contain information about whether the conditions of the inline rule were satisfied and if not why.
Meilisearch Cloud will use this backend feature to implement a preview UI for dynamic search rules.
Using inlineRule requires Meilisearch Enterprise Edition and the dynamicSearchRules experimental feature.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6669
- There is a new
InlineRuleobject with the following field:uid, string, mandatory: unique ID of the rule. If there is already a rule with this id, then the inline rule will replace the existing rule for the duration of this search query.active, boolean, optional, defaults totrue: whether the rule is active. The actions of an inactive inline rule never apply to the search, but its conditions are still checkedconditions:RuleConditionsobject, identical to theconditionsfield in the body ofPATCH /dynamic-search-rules/{:uid}actions:RuleActionsobject, identical to theactionsfield in the body ofPATCH /dynamic-search-rules/{:uid}precedence: integer, optional, identical to theprecedencefield in the body ofPATCH /dynamic-search-rules/{:uid}
- The
POST /indexes/{:indexUid}/searchbody has an additional, optional (defaults tonull)inlineRulefield which is anInlineRuleobject. - In the
POST /multi-searchbody, the objects inside thequeriesarray have an additional, optional (defaults tonull)inlineRulefield which is anInlineRuleobject.
Passing a search rule specific to the user making the request
Previewing the effect of a search rule
// POST /multi-search -H 'Meili-Include-Metadata: true`
{
"queries": [
// base query without inline rule
{
"q": "fashion",
"filter": "color = blue AND category = shirt"
},
// same query with inline rule
{
"q": "fashion",
"filter": "color = blue AND category = shirt",
"inlineRule": {
"uid": "special-sales",
"conditions": {
"query": {
"words": "pants",
},
"filter": {
"values": {
"color": "yellow",
"stock_intent": "destock"
}
}
}
}
}
]
}
Response:
{
// [ ... ] some other fields
"results": [
// results without the rule
{
"hits": [ ... ] // documents returned without the rule
},
// results with the rule
{
// [...] some other fields
"hits": [...], // documents returned with the rule. Here the same, because the conditions of the rules are not satisfied
"metadata": {
// [...] some other fields
"inlineRuleConditionOutcomes": {
"satisfiesActiveCondition": true,
"satisfiesQueryWordsCondition": {
"missingWord": "pants"
},
"satifiesFilterCondition": {
"missingConstraintOnField": {
"field": "stock_intent"
},
"unmetConstraintOnField":
"field": "color"
}
}
}
}
]
}
When setting showPerformanceDetails to true in a search request, the response's performanceDetails will now display an entry for the facet distribution computation.
New trace entries
Request
curl -X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
-d '{
"q": "batman",
"facets": ["genres"],
"showPerformanceDetails": true,
"limit": 3
}'
Response
{
"hits": [
# ...
],
"query": "batman",
"processingTimeMs": 4,
"limit": 3,
"offset": 0,
"estimatedTotalHits": 68,
"facetDistribution": {
"genres": {
#...
}
},
"facetStats": {},
"requestUid": "01a12f80-0e1b-7632-b4f3-c8d4914048c9",
"performanceDetails": {
"wait in queue": "68.58µs",
"preprocess filters > prepare": "100.25µs",
"preprocess filters": "100.42µs",
"process > prepare": "115.54µs",
"process > send to remote": "102.71µs",
"process > execute local > load field ids map": "30.88µs",
"process > execute local > query[0] > tokenize query": "265.38µs",
"process > execute local > query[0] > evaluate query": "890.96µs",
"process > execute local > query[0] > keyword ranking": "425.04µs",
"process > execute local > query[0]": "2.95ms",
"process > execute local > pin hits": "9.92µs",
"process > execute local > format": "94.62µs",
"process > execute local > facet distribution > compute facet distribution": "315.75µs",
"process > execute local > facet distribution > compute facet stats": "27.71µs",
"process > execute local > facet distribution": "432.62µs",
"process > execute local": "3.81ms",
"process > wait for remote": "50.96µs",
"process > merge": "905.62µs",
"process": "5.07ms"
}
}
Three additional steps:
"process > execute local > facet distribution > compute facet distribution": "315.75µs",
"process > execute local > facet distribution > compute facet stats": "27.71µs",
"process > execute local > facet distribution": "432.62µs",
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6644
Documents containing raw unicode codepoints (e.g. \u03b1) would cause a panic at search time when formatting results for highlighting when using some segmenters.
A failure at the segmenter's level no longer causes a panic.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6673
[!IMPORTANT]
This fix modifies the relevancy of the engine in some circumstances. This is allowed as per our back-compatiblity policy.
To avoid a performance sink when using the rankingScoreThreshold parameter in a search, Meilisearch now guarantees that the search will stop after evaluating the first document whose score is below the threshold. Previously Meilisearch would try to evaluate more documents, which could lead to evaluating all documents in the database, causing a very long search time.
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6661
[!WARNING]
This fix introduces a breaking change in the Meilisearch API. Because the previous behavior would corrupt the embeddings in the database, this is allowed by our back-compatibility policy.
Since the exact value of embeddings is not retained when the embedder is configured for binary quantize embeddings, disabling the binary quantization on an index is not allowed.
Unfortunately, an oversight in the API allowed to accidentally disable binary quantization by passing binaryQuantization: null in a setting update. This now results in an error.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6656
- Maintainability: replace some
unreachable!()code paths with static typing by @dureuill in https://github.com/meilisearch/meilisearch/pull/6670 - Add GHA to enforce benchmarks label on each PR by @curquiza in https://github.com/meilisearch/meilisearch/pull/6663
- Add link to MCP guide in generated API reference by @Strift in https://github.com/meilisearch/meilisearch/pull/6650
- Add link to agentic search demo & fix links by @Strift in https://github.com/meilisearch/meilisearch/pull/6655
- Small changes to CONTRIBUTING.md by @dureuill in https://github.com/meilisearch/meilisearch/pull/6668
- Bump actions/setup-java from 5.7.0 to 6.0.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6662
- Fix OpenAPI docs by @curquiza in https://github.com/meilisearch/meilisearch/pull/6667
- CI: Fix flaky tests by @dureuill in https://github.com/meilisearch/meilisearch/pull/6674
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.54.3...v1.55.0
v1.52.4
This release contains an important stability fix for Meilisearch. Update from v1.52.3 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
v1.53.3
This release contains an important stability fix for Meilisearch. Update from v1.53.2 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
v1.54.3
This release contains an important stability fix for Meilisearch. Update from v1.54.2 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
v1.54.2
Meilisearch v1.54.2 contains an important fix for users of the dynamicSearchRule experimental feature.
- Trying to process, display, delete or cancel dynamic search rules update tasks that were created in Meilisearch v1.53 or prior no longer causes internal errors. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6651. Thanks to @connorabbas for their report in https://github.com/meilisearch/meilisearch/issues/6646 ❤️
v1.54.1
- Make the embedder setting change succeed when the embedder's API key is expired by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6640
- Ignore geo errors when updating or deleting existing docs by @dureuill in https://github.com/meilisearch/meilisearch/pull/6638
- Aggregate the analytics from the MCP route by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6639