meilisearch @ v1.54.0
integrity
- size
- 20.4 MiB
- downloaded
- last checked
release notes
💥 Breaking Changes
Meilisearch v1.54.0 makes breaking changes to the dynamicSearchRules experimental features.
- For Cloud users, rules will be migrated automatically, and the UI will adapt to the new API. Only the first change on rulelist might affect users that directly get rules through the API.
- If upgrading with
--upgrade-db, rules will be migrated automatically.
-
The
POST /dynamic-search-rulesendpoint now returnsactionsas an object with 2 fields instead of a list: -
pinis an array ofPinobjects with the following fields:id, String, mandatory: document id of the document to pinposition: positive or zero number, mandatory: position where to pin the documentindexUid, optional, defaults tonull, uid of the index that this action applies to. Ifnullor missing, the action applies to any index containing a document with the providedid.
-
scaleis an array ofScaleobjects with the following fields:weight, positive or zero number, mandatory: scaling factor to multiply with the selected documents' innate relevancy scoreids, array of strings, optional: list of document ids whose document's relevancy score should be scaled by the provided weightfilter: Meilisearch filter without a foreign filter, optional: a filter on the index that is resolved to determine a list of selected documentsindexUid, optional, defaults tonull, uid of the index that this action applies to. Ifnullor missing, the action applies to any index.
-
The
PATCH /dynamic-search-rules/{:ruleUid}endpoint now expects a rule with the modifiedactionsfield. See changes toPOST /dynamic-search-rulesfor details. -
The uid
__meilisearch_metadatais now reserved and cannot be used as aruleUidinPATCH /dynamic-search-rules/{:ruleUid}
🌈 Enhancements
Boost, demote and hide documents with search rules
- A dynamic search rule can now boost, deboost or hide documents by defining a new "scale" action that selects some documents by filter and/or an explicit list of ids and exposes a scale factor as a
weight:- If the weight is > 1.0, then the selected documents are boosted
- If the weight is < 1.0, then the selected documents are deboosted (demoted)
- If the weight is = 0.0, then the selected documents are hidden and don't appear in search results (unless if they are also pinned)
- ⚠️ Because the factor is applied to the relevancy rules, it has little measurable effect when the first ranking rule is not a relevancy rule.
- Score details for a pinned document now contains an additional
ruleUidfield indicating the name of the rule that resulted in the document being pinned. ⚠️ As a result, end-users can find out the uid of applied rules by looking at ranking score details. Please keep any sensitive information in the description of the rule instead ⚠️ - Score details for a scaled document now contains an additional
scalefield, with order0. The scale field is an object with the following fields:order: order of application of the rule. Always 0actions: an array ofScaleActions, where eachScaleActioncontains the following fields:ruleUid: the name of the rule that was appliedweightthe weight of the rule that was applied
totalWeight: the total multiplicative factor computed as the product of the individual.actions[].weight.
- New environment variables controlling how much scale operations can occur:
MEILI_EXPERIMENTAL_DSR_FUEL_MAX_SCALE_ACTIONS: maximum number of applicable (at least one selected document) scale actions in a single search. Range 1-255, default 10MEILI_EXPERIMENTAL_DSR_FUEL_SCALE_FUEL: maximum number of combinations of scale constraint that are evaluated in a single search. Range 1-255, default 10.
Examples
- Creating the search rule
// PATCH /dynamic-search-rule/batman-festival
{
"conditions": {
"time": {
"start": "2026-09-21T19:00:00Z",
"end": "2026-09-28T18:59:00Z"
},
},
"actions": {
"scale": [
{
"filter": "series = batman",
"weight": 4.0
}
]
}
}
- Once the DSR update task has been processed and the festival begins on September 21st, make a search query:
{
"q": "superhero returns prequel",
"showRankingScoreDetails": true
}
- Observe the ranking of documents
"hits": [
{
"id": "batman-returns",
"title": "Batman Returns",
"series": "batman",
"_rankingScore": 0.30808080808080807,
"_rankingScoreDetails": {
"scale": {
"order": 0,
"actions": [
{
"ruleUid": "batman-festival",
"weight": 4.0
}
],
"totalWeight": 4.0
},
"words": {
"order": 1,
"matchingWords": 1,
"maxMatchingWords": 3,
"score": 0.3333333333333333
},
"typo": {
"order": 2,
"typoCount": 0,
"maxTypoCount": 1,
"score": 1.0
},
"proximity": {
"order": 3,
"score": 1.0
},
"attributeRank": {
"order": 4,
"score": 1.0
},
"wordPosition": {
"order": 5,
"score": 0.9090909090909092
},
"exactness": {
"order": 6,
"matchType": "noExactMatch",
"matchingWords": 1,
"maxMatchingWords": 1,
"score": 0.3333333333333333
}
}
},
{
"id": "superman-returns",
"series": "superman",
"title": "Superman Returns - The Prequels",
"_rankingScore": 0.9628456221198156,
"_rankingScoreDetails": {
"words": {
"order": 0,
"matchingWords": 3,
"maxMatchingWords": 3,
"score": 1.0
},
"typo": {
"order": 1,
"typoCount": 0,
"maxTypoCount": 3,
"score": 1.0
},
"proximity": {
"order": 2,
"score": 0.5714285714285714
},
"attributeRank": {
"order": 3,
"score": 1.0
},
"wordPosition": {
"order": 4,
"score": 0.9032258064516128
},
"exactness": {
"order": 5,
"matchType": "noExactMatch",
"matchingWords": 2,
"maxMatchingWords": 3,
"score": 0.25
}
}
},
// ...
],
"processingTimeMs": "[duration]",
"limit": 20,
"offset": 0,
"estimatedTotalHits": 42,
"requestUid": "[uuid]"
}
// PATCH /dynamic-search-rules/out-of-stock
{
"actions": {
"scale": [
{
"filter": "availability = \"out of stock\"",
"weight": 0.5
}
]
}
}
// PATCH /dynamic-search-rules/discontinued
{
"actions": {
"scale": [
{
"filter": "availability = discontinued",
"weight": 0.0
}
]
}
}
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6549
MCP endpoint
We introduce a new MCP protocol on the /mcp path. It implements the HTTP+SSE Transport version of the protocol. You can register the Meilisearch MCP in your favorite LLM, e.g., Claude Code, Codex. Note that the MCP route is using bearer authentication and doesn't support OAuth authentication.
Enable the mcpRoute experimental feature to use the feature.
by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6629
Improve search performance details in multi-search
The performance details in a federated search now separate the timing per query
"performanceDetails": {
"wait in queue": "1.36ms",
"preprocess filters > prepare": "985.00µs",
"preprocess filters > send to remote": "220.00µs",
"preprocess filters > execute local > evaluate filter": "139.00µs",
"preprocess filters > execute local": "1.61ms",
"preprocess filters > wait for remote": "35.97ms",
"preprocess filters": "39.01ms",
"process > prepare": "96.00µs",
"process > send to remote": "118.00µs",
"process > execute local > load field ids map": "63.00µs",
"process > execute local > query[0] > evaluate filter": "84.00µs",
"process > execute local > query[0] > tokenize query": "163.00µs",
"process > execute local > query[0] > evaluate query": "116.00µs",
"process > execute local > query[0] > keyword ranking": "634.00µs",
"process > execute local > query[0]": "1.52ms",
"process > execute local > pin hits": "29.00µs",
"process > execute local > format": "36.00µs",
"process > execute local": "2.90ms",
"process > wait for remote": "37.24ms",
"process > merge": "82.00µs",
"process": "40.45ms",
"hydrate > send to remote": "38.00µs",
"hydrate > execute local": "35.00µs",
"hydrate > wait for remote": "41.00µs",
"hydrate": "295.00µs",
"merge facets": "51.00µs"
}
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6631
🔩 Miscellaneous
- Remove
HashMaptransmute in indexer by @dureuill in https://github.com/meilisearch/meilisearch/pull/6622 - Bump
lruto 0.18.4 by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6633 - Simplify Rust install and update Rust to v1.98.1 by @dureuill in https://github.com/meilisearch/meilisearch/pull/6601
- Bump most dependencies by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6589
- Bump
actions/setup-gofrom 6.5.0 to 7.0.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6611 - Fix grammar and broken Markdown links in error code descriptions by @curquiza in https://github.com/meilisearch/meilisearch/pull/6626
- Fix typo by @simpleqt in https://github.com/meilisearch/meilisearch/pull/6619
New Contributors
- @simpleqt made their first contribution in https://github.com/meilisearch/meilisearch/pull/6619
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.53.2...v1.54.0
download
curl -fL -o v1.54.0.zip https://ratatoskr.space/pkg/meilisearch/v1.54.0.zip
printf '%s %s\n' '8faa971e931019f8f392fbed5f135ca7986541730b4b41965d03f70a20cc590e' 'v1.54.0.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/meilisearch/v1.54.0.zip"
$out = "v1.54.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8faa971e931019f8f392fbed5f135ca7986541730b4b41965d03f70a20cc590e") { throw "sha256 mismatch" }
curl -fL -o v1.54.0.tar.gz https://ratatoskr.space/pkg/meilisearch/v1.54.0.tar.gz
printf '%s %s\n' 'e1fa1b85996b8760fe4a5844086b3745f4d03ea0d7bfe6663427a2059696bd7b' 'v1.54.0.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/meilisearch/v1.54.0.tar.gz"
$out = "v1.54.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "e1fa1b85996b8760fe4a5844086b3745f4d03ea0d7bfe6663427a2059696bd7b") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v1.54.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.zip
printf '%s %s\n' '8faa971e931019f8f392fbed5f135ca7986541730b4b41965d03f70a20cc590e' 'v1.54.0.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.zip"
$out = "v1.54.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8faa971e931019f8f392fbed5f135ca7986541730b4b41965d03f70a20cc590e") { throw "sha256 mismatch" }
curl -fL -o v1.54.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.tar.gz
printf '%s %s\n' 'e1fa1b85996b8760fe4a5844086b3745f4d03ea0d7bfe6663427a2059696bd7b' 'v1.54.0.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.tar.gz"
$out = "v1.54.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "e1fa1b85996b8760fe4a5844086b3745f4d03ea0d7bfe6663427a2059696bd7b") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v1.54.0.zip | zip | 20.4 MiB |
blake3-24 b1c8156ada4ff74d2dbd1a998bee647fe35b6dd20718f84c
sha256 8faa971e931019f8f392fbed5f135ca7986541730b4b41965d03f70a20cc590e
sha1 5978db25ae23d82386b93e5fb0b6efcfef26d634
|
| v1.54.0.tar.gz | tar.gz | 19.4 MiB |
blake3-24 9329ebb67b4c566cd8f31dcfeaf6d5d17753c67327b04de2
sha256 e1fa1b85996b8760fe4a5844086b3745f4d03ea0d7bfe6663427a2059696bd7b
sha1 fa670b14221fd6f94ab5001a21cc0370eb280a93
|
install
http_archive(
name = "meilisearch",
urls = ["https://ratatoskr.space/pkg/meilisearch/v1.54.0.tar.gz"],
integrity = "sha256-4fobhZlrh2D+SlhECGs3RfTQPqDXv+ZmNCeiBZaWvXs=",
strip_prefix = "meilisearch-v1.54.0",
)
.url = "https://ratatoskr.space/pkg/meilisearch/v1.54.0.tar.gz",
install via yggdrasil mesh
http_archive(
name = "meilisearch",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.tar.gz"],
integrity = "sha256-4fobhZlrh2D+SlhECGs3RfTQPqDXv+ZmNCeiBZaWvXs=",
strip_prefix = "meilisearch-v1.54.0",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/meilisearch/v1.54.0.tar.gz",