v1.37.0
[!IMPORTANT]
This release contains breaking changes for users of thenetworkexperimental feature.
Meilisearch v1.37 introduces replicated sharding, removes the vectorStoreSetting experimental feature, stabilizes our new vector store for best performance, adds a security fix and miscellaneous improvements.
§ Replicated sharding
[!NOTE] Replicated sharding requires Meilisearch Enterprise Edition (EE).
- Users of Meilisearch Cloud, please contact support if you need replicated sharding.
- Users of the Community Edition, please contact the sales if you want to use replicated sharding in production.
§ Breaking changes
networkobjects sent to thePATCH /networkroute must now contain at least oneshardobject containing at least one remote whenleaderis notnull.
Existing databases will be migrated automatically when upgraded with --experimental-dumpless-upgrade when leader is not null, such that for each remote:
- A shard with the same name as the remote is created
- This shard has exactly one remote in its
remoteslist: the remote with the same name as the shard.
This change will not cause any document to be resharded.
To be able to upgrade without resharding, the migration uses the same name for remotes and for shards. However, in new configurations, we recommend using different names for shards and remotes.
Example of migration
For instance, the following network object:
is converted to:
{
"leader": "ms-00",
"self": "ms-01",
"remotes": {
"ms-00": { /* .. */ },
"ms-01": { /* .. */ }
},
"shards": { // ✨ NEW
"ms-00": { // shard named like the remote
"remotes": ["ms-00"] // is owned by the remote
},
"ms-01": {
"remotes": ["ms-01"]
}
}
}
The network object for routes PATCH /network and GET /network now contains the new field shards, which is an object whose values are shard objects, and keys the name of each shard.
Each shard object contains a single field remotes, which is an array of strings, each string representing the name of an existing remote.
The shard objects in PATCH /network contain the additional fields addRemotes and removeRemotes meant for convenience:
- pass an array of remote names to
shard.addRemotesto add these remotes to the list of remotes of a shard. - pass an array of remote names to
shard.removeRemotesto remove these remotes from the list of remotes of a shard. - if present and non-
null,shard.remoteswill completely override the existing list of remotes for a shard. - if several of these options are present and non-
null, then the order of application isshard.remotes, thenshard.addRemotes, thenshard.removeShards.
Adding a new shard with some remotes
// PATCH /network
{
// assuming that remotes `ms-0`, `ms-1`, `ms-2` where sent in a previous call to PATCH /network
"shards": {
"s-a": { // new shard
"remotes": ["ms-0", "ms-1"]
}
}
}
Remotes ms-0 and ms-1 own the new shard s-a.
Fully overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-0` and `ms-1`
"shards": {
"s-a": {
"remotes": ["ms-2"]
}
}
}
ms-2 is now the sole owner of s-a, replacing ms-0 and ms-1.
Adding a remote without overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-2`
"shards": {
"s-a": {
"addRemotes": ["ms-0"]
}
}
}
ms-0 and ms-2 are now the owners of s-a.
Removing a remote without overriding the list of remotes owning a shard
// PATCH /network
{
// assuming remotes `ms-0`, `ms-1`, `ms-2`
// assuming shard `s-a`, owned by `ms-0` and `ms-2`
"shards": {
"s-a": {
"removeRemotes": ["ms-2"]
}
}
}
ms-0 is now the sole owner of s-a.
Entirely removing a shard from the list of shards
Set the shard to null:
// PATCH /network
{
"shards": {
"s-a": null
}
}
Or set its remotes list to the empty list:
// PATCH /network
{
"shards": {
"s-a": {
"remotes": []
}
}
}
When network.leader is not null, each shard object in network.shards must:
- Only contain
remotesthat exist in the list ofremotes. - Contain at least one remote.
Additionally, network.shards must contain at least one shard.
Failure to meet any of these conditions will cause the PATCH /network route to respond with 400 invalid_network_shards.
Documents are now sharded according to the list of shards declared in the network rather than the list of remotes. All remotes owning a shard will process the documents that belong to this shard, allowing for replication.
Example of replication
The following configuration defines 3 remotes 0, 1 and 2, and 3 shards A, B, C, such that each remote owns two shards, achieving replication (losing one remote does not lose any document).
{
"leader": "0",
"self": "0",
"remotes": {
"0": { /* .. */ },
"1": { /* .. */ },
"2": { /* .. */ }
},
"shards": {
"A": {
"remotes": ["0", "1"]
},
"B": {
"remotes": ["1", "2"]
},
"C": {
"remotes": ["2", "0"]
}
}
}
- Full replication is supported by having all remotes own all the shards.
- Unbalanced replication is supported by having some remotes own more shards than other remotes.
- "Watcher" remotes are supported by having remotes that own no shards. Watcher remotes are not very useful in this release, and might be upgraded in a future release, so that they keep all documents without indexing them, allowing to "respawn" shards for other remotes.
When useNetwork: true is passed to a search query, it is expanded to multiple queries such that each shard declared in network.shards appears exactly once, associated with a remote that owns that shard.
This ensures that there is no missing or duplicate documents in the results.
When the network experimental feature is enabled, then it becomes possible to filter documents depending on the shard they belong to.
Given s-a and s-b the names of two shards declared in network.shards, then:
_shard = "s-a"in afilterparameter to the search or documents fetch will return the documents that belong tos-a._shard != "s-a"will return the documents that do not belong tos-a_shard IN ["s-a", "s-b"]will return the documents that belong tos-aor tos-b.
You can use these new filters in manual remote federated search to create a partitioning over all shards in the network.
[!IMPORTANT] To avoid duplicate or missing documents in results, for manually crafted remote federated search requests, all shards should appear in exactly one query.
[!TIP] Search requests built with
useNetwork: truealready build a correct partitioning over shards. They should be preferred to manually crafted remote federated search requests in replicated sharding scenarios.
When updating your Meilisearch network using dumpless upgrade, please observe the following guidelines:
- Do not call the
PATCH /networkroute until all remotes of the network are finished updating - If using the search routes with
useNetwork: true, call them on un-updated remotes. Calling it on already updated remotes will cause un-updated remotes to fail the search as they don't know about the_shardfilters.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6128
§ Remove vectorStoreSetting experimental feature
The new HNSW vector store (hannoy) has been stabilized and is now the only supported vector store in Meilisearch.
As a result, updating to v1.37.0 will migrate all remaining legacy vector store indexes (using arroy) to hannoy, and the vectorStoreSetting experimental feature is no longer available.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6176
We removed a computationally expensive step from vector indexing.
On a DB with 20M documents, this removes 300s per indexing batch of 1100s.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6175
§ 🔒 Security
- Bump mini-dashboard (local web interface) which
- now stores API key in RAM instead of in the
localStorage - bumps dependencies with potential security vulnerabilities
- now stores API key in RAM instead of in the
By @Strift and @curquiza in https://github.com/meilisearch/meilisearch/pull/6186 and https://github.com/meilisearch/meilisearch/pull/6172
§ 🔩 Miscellaneous
- Mark Cargo.lock as not linguist-generated by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6181
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.36.0...v1.37.0
v1.36.0 🐙
Version v1.36.0 introduces an exciting update to the ranking rules to improve the engine's relevance. It's actually the first time we've made such a change since v1.0, and we're really happy about this improvement!
-
Introduce the
attributeRankandwordPositioncriteria by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6154, https://github.com/meilisearch/meilisearch/pull/6155, and https://github.com/meilisearch/meilisearch/pull/6164We released two new ranking rules that Meilisearch had already been using internally for the
attributeone, which is basically both ranking rules applied one after the other:attributeRank: A document is considered better if the query words match in a higher searchable attribute. It ignores the position of the query words in this attribute.wordPosition: A document is considered better if the query words match closer to the beginning of an attribute. The attribute rank is ignored by this rule.
We continue our policy of migrating everyone to use a homemade HNSW by introducing a new dumpless upgrade step that migrates index uses the old annoy vector store to the new Hannoy one. Changing the vector store backend affects the ranking score. This step can take a couple of minutes when the number of embeddings is high, and we recommend changing the vector store backend beforehand to gain more control if needed. To do so, you must enable the
vectorStoreSettingexperimental feature and set thevectorStoreroot setting toexperimental.
- Fix search failing when using
attributesToSearchOnon an empty index by @zen-zap in https://github.com/meilisearch/meilisearch/pull/5944
- Bump bytes from 1.11.0 to 1.11.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6142
- Bump jsonwebtoken from 9.3.1 to 10.3.0 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6141
- Bump time from 0.3.44 to 0.3.47 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6144
- Bump rsa from 0.9.9 to 0.9.10 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6149
- Improve OpenAPI docs and CIs to improve documentation experience by @curquiza in https://github.com/meilisearch/meilisearch/pull/6145
[!WARNING] Breaking change: the
meilisearch-openapi-mintlify.jsonfile will not be available in the release assets anymore. If you were using it, please refer to the one that is now available in our public documentation repository.
- GenAI contributing and PR template changes by @dureuill in https://github.com/meilisearch/meilisearch/pull/6140
- Fix "test with almost all features" by @dureuill in https://github.com/meilisearch/meilisearch/pull/6139 and https://github.com/meilisearch/meilisearch/pull/6148
- Allow any IP for SDK tests by @Strift in https://github.com/meilisearch/meilisearch/pull/6151
- Improve output of the declarative tests, also in https://github.com/meilisearch/meilisearch/pull/6164
❤️ Thanks to @zen-zap for contributing to this release!
v1.35.1
Meilisearch v1.35.1 fixes a possible task database corruption issue that would occur when using the S3 streaming snapshot method.
- Users of the Community Edition do not need to upgrade as this feature is Enterprise Edition only
- Affected users of the Cloud have been contacted.
While snapshotting the task database, sending a task to Meilisearch could corrupt it. Index DBs were not affected, so manually rebuilding the task database fixes the corruption.
By @dureuill in #6160
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.35.0...v1.35.1
v1.35.0
The search routes accept a new field named showPerformanceDetails. When set to ù true`, the search response contains a performance trace, allowing the user to better understand what takes time during a search query.
impacted routes:
POST /indexes/<index_uid>/searchGET /indexes/<index_uid>/searchPOST /multi-searchPOST /indexes/<index_uid>/similarGET /indexes/<index_uid>/similar
routes: POST /indexes/<index_uid>/search and GET /indexes/<index_uid>/search
new request parameters:
showPerformanceDetails:true/false(boolean)
example
{
"q": "glass",
"showPerformanceDetails": true
}
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)
example
{
"hits": [
// hits ..
],
"query": "glass",
"processingTimeMs": 5,
"limit": 20,
"offset": 0,
"estimatedTotalHits": 1,
"requestUid": "<uuid>",
"performanceDetails": {
"wait for permit": "295.29µs",
"search > tokenize": "436.67µs",
"search > resolve universe": "649.00µs",
"search > keyword search": "515.71µs",
"search > format": "288.54µs",
"search": "3.56ms"
}
}
route: /multi-search
new request parameters:
queries.showPerformanceDetails:true/false(boolean)
example
"queries": [
{
"indexUid": "<index_uid>",
"q": "glass",
"showPerformanceDetails": true
}
]
new response field:
results.performanceDetails:{"<span>": "<human_duration>", .. }(map)
example
{
"results": [
{
"indexUid": "<index_uid>",
"hits": [
// hits ..
],
"query": "glass",
"processingTimeMs": 5,
"limit": 20,
"offset": 0,
"estimatedTotalHits": 1,
"requestUid": "<uuid>",
"performanceDetails": {
"wait for permit": "295.29µs",
"search > tokenize": "436.67µs",
"search > resolve universe": "649.00µs",
"search > keyword search": "515.71µs",
"search > format": "288.54µs",
"search": "3.56ms"
}
}
]
}
route: /multi-search
new request parameters:
federation.showPerformanceDetails:true/false(boolean)
example
{
"federation": { "showPerformanceDetails": true },
"queries": [
{
"indexUid": "<index_uid>",
"q": "glass"
}
]
}
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)
example
{
"hits": [
// hits ..
],
"query": "glass",
"processingTimeMs": 5,
"limit": 20,
"offset": 0,
"estimatedTotalHits": 1,
"requestUid": "<uuid>",
"performanceDetails": {
"wait for permit": "213.83µs",
"search > tokenize": "171.67µs",
"search > resolve universe": "257.63µs",
"search > keyword search": "577.71µs",
"search > format": "114.96µs",
"search > federation > wait for remote results": "62.71µs",
"search > federation > merge results": "120.04µs",
"search > federation > merge facets": "53.42µs",
"search > federation": "237.04µs",
"search": "289.08ms"
}
}
route: /indexes/<index_uid>/similar
new request parameters:
showPerformanceDetails:true/false(boolean)
example
{
"id": 143,
"embedder": "manual",
"showPerformanceDetails": true
}
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)
example
{
"hits": [
// hits ..
],
"id": "143",
"processingTimeMs": "[duration]",
"limit": 20,
"offset": 0,
"estimatedTotalHits": 4,
"performanceDetails": {
"search > format": "244.92µs",
"search": "1.25ms"
}
}
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6132
- Add AI usage disclosure guidelines to CONTRIBUTING.md by @meili-bot in https://github.com/meilisearch/meilisearch/pull/6114
- fix: expose SettingsDelta and related types for external crate usage by @MkDev11 in https://github.com/meilisearch/meilisearch/pull/6119
- Return Pagination fields in /fields route by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6126
- Stabilize the post-processing multithreading by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6130
- Bump mini-dashboard version to fix display of image in local UI interface by @Strift in https://github.com/meilisearch/meilisearch/pull/6129
- Fix mTLS compatibility with Go by @curquiza in https://github.com/meilisearch/meilisearch/pull/6133
- @MkDev11 made their first contribution in https://github.com/meilisearch/meilisearch/pull/6119
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.3...v1.35.0
v1.34.3
- Increase the auth store database size to 2 GiB so that we can index more keys by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6134
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.2...v1.34.3
v1.34.2
This patch fixes an accidental breaking change in v1.34.1 where Meilisearch would not start with a configuration file if experimental_allowed_ip_networks was not defined.
- Meilisearch Cloud users do not need to update as they were not affected by this regression
- We recommend that OSS users upgrade to v1.34.2
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.1...v1.34.2
v1.34.0
The search query object passed in the body of POST /indexes/{:indexUid}/search now accepts an optional boolean useNetwork. When present and set to true, the search is executed "as-if" it was a remote federated search over all remotes in the network.
That is, the following:
Search request
// POST /indexes/movies/search
{
"q": "Batman dark knight returns 1",
"filter": "genres IN [Action, Adventure]",
"facets": ["genres"],
"useNetwork": true, // ✨ NEW
"limit": 5
}
Is executed by Meilisearch as if it was the following, assuming a network of 3 Meilisearch instances with names "0", "1" and "2":
Equivalent multi-search request
// POST /multi-search
{
"federation": {
"limit": 5,
"facetsByIndex": {
"movies": [
"genres"
]
},
"merge": {}
},
"queries": [
{
"indexUid": "movies",
"federationOptions": {
"remote": "0"
},
"q": "Batman dark knight returns 1",
"filter": "genres IN [Action, Adventure]"
},
{
"indexUid": "movies",
"federationOptions": {
"remote": "1"
},
"q": "Batman dark knight returns 1",
"filter": "genres IN [Action, Adventure]"
},
{
"indexUid": "movies",
"federationOptions": {
"remote": "2"
},
"q": "Batman dark knight returns 1",
"filter": "genres IN [Action, Adventure]"
}
]
}
Resulting in:
Search Response
{
"hits": [
{
"id": 123025,
"title": "Batman: The Dark Knight Returns, Part 1",
"overview": "Batman has not been seen for ten years. A new breed of criminal ravages Gotham City, forcing 55-year-old Bruce Wayne back into the cape and cowl. But, does he still have what it takes to fight crime in a new era?",
"genres": [
"Action",
"Animation",
"Mystery"
],
"poster": "https://image.tmdb.org/t/p/w500/kkjTbwV1Xnj8wBL52PjOcXzTbnb.jpg",
"release_date": 1345507200,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 2,
"weightedRankingScore": 0.9894586894586894,
"remote": "2"
}
},
{
"id": 142061,
"title": "Batman: The Dark Knight Returns, Part 2",
"overview": "Batman has stopped the reign of terror that The Mutants had cast upon his city. Now an old foe wants a reunion and the government wants The Man of Steel to put a stop to Batman.",
"genres": [
"Action",
"Animation",
"Mystery"
],
"poster": "https://image.tmdb.org/t/p/w500/arEZYd6uMOFTILne9Ux0A8qctMe.jpg",
"release_date": 1357171200,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 0.9894558963186414,
"remote": "1"
}
},
{
"id": 16234,
"title": "Batman Beyond: Return of the Joker",
"overview": "The Joker is back with a vengeance, and Gotham's newest Dark Knight needs answers as he stands alone to face Gotham's most infamous Clown Prince of Crime.",
"genres": [
"Animation",
"Family",
"Action",
"Science Fiction"
],
"poster": "https://image.tmdb.org/t/p/w500/7RlBs0An83fqAuKfwH5gKMcqgMc.jpg",
"release_date": 976579200,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 0.9427964918160996,
"remote": "1"
}
},
{
"id": 155,
"title": "The Dark Knight",
"overview": "Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.",
"genres": [
"Drama",
"Action",
"Crime",
"Thriller"
],
"poster": "https://image.tmdb.org/t/p/w500/qJ2tW6WMUDux911r6m7haRef0WH.jpg",
"release_date": 1216166400,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 0.5784178187403994,
"remote": "1"
}
},
{
"id": 49026,
"title": "The Dark Knight Rises",
"overview": "Following the death of District Attorney Harvey Dent, Batman assumes responsibility for Dent's crimes to protect the late attorney's reputation and is subsequently hunted by the Gotham City Police Department. Eight years later, Batman encounters the mysterious Selina Kyle and the villainous Bane, a new terrorist leader who overwhelms Gotham's finest. The Dark Knight resurfaces to protect a city that has branded him an enemy.",
"genres": [
"Action",
"Crime",
"Drama",
"Thriller"
],
"poster": "https://image.tmdb.org/t/p/w500/vzvKcPQ4o7TjWeGIn0aGC9FeVNu.jpg",
"release_date": 1342396800,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 2,
"weightedRankingScore": 0.5772657450076805,
"remote": "2"
}
}
],
"query": "Batman dark knight returns 1",
"processingTimeMs": 173,
"limit": 5,
"offset": 0,
"estimatedTotalHits": 47,
"facetDistribution": {
"genres": {
"Action": 46,
"Adventure": 15,
"Animation": 34,
"Comedy": 3,
"Crime": 14,
"Drama": 6,
"Family": 15,
"Fantasy": 8,
"Horror": 1,
"Mystery": 4,
"Romance": 1,
"Science Fiction": 14,
"TV Movie": 4,
"Thriller": 4,
"Western": 1
}
},
"facetStats": {},
"requestUid": "019bbcf4-a609-7701-8d82-d370611adfb3",
"remoteErrors": {}
}
useNetwork requires the network experimental feature to be enabled.
Passing useNetwork=true as a query parameter to GET /indexes/{:indexUid}/search has the same effect as passing useNetwork: true as a field parameter to POST /indexes/{:indexUid}/search
useNetworkcan also be passed as a field of the individual queries inside of amulti-searchrequest.- When used on a query in a non-federated search request, it has the same effect as on
POST /indexes/{:indexUid}/searchfor that query - When used on a query in a federated search request, the request is executed "as-if" one query per remote of the network had been performed.
Federated search example:
Multi-search request
{
"federation": {
"limit": 5
},
"queries": [
{
"q": "Batman returns",
"indexUid": "mieli",
"useNetwork": true
},
{
"q": "Superman returns",
"indexUid": "mieli",
"useNetwork": true
}
]
}
Multi-search response
{
"hits": [
{
"id": 364,
"title": "Batman Returns",
"overview": "While Batman deals with a deformed man calling himself the Penguin, an employee of a corrupt businessman transforms into the Catwoman.",
"genres": [
"Action",
"Fantasy"
],
"poster": "https://image.tmdb.org/t/p/w500/jKBjeXM7iBBV9UkUcOXx3m7FSHY.jpg",
"release_date": 708912000,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 0,
"weightedRankingScore": 1.0,
"remote": "1"
}
},
{
"id": 1452,
"title": "Superman Returns",
"overview": "Superman returns to discover his 5-year absence has allowed Lex Luthor to walk free, and that those he was closest to felt abandoned and have moved on. Luthor plots his ultimate revenge that could see millions killed and change the face of the planet forever, as well as ridding himself of the Man of Steel.",
"genres": [
"Science Fiction",
"Action",
"Adventure"
],
"poster": "https://image.tmdb.org/t/p/w500/qIegbn6DSUYmggfwxOBNOVS35q.jpg",
"release_date": 1151452800,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 1.0,
"remote": "0"
}
},
{
"id": 324249,
"title": "Requiem for Krypton: Making 'Superman Returns'",
"overview": "A detailed behind-the-scenes documentary on the making of Superman Returns.",
"genres": [
"Documentary"
],
"poster": "https://image.tmdb.org/t/p/w500/eC1XKswKSoyDyJXXZszLTuwUHli.jpg",
"release_date": 1164672000,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 0.9907407407407408,
"remote": "1"
}
},
{
"id": 294294,
"title": "Saltwater",
"overview": "This American Indie drama follows several endearing characters as they wade through life seeking happiness, peace and ultimately, love. Will (Ronnie Kerr, Vampire Boys 2, Shut Up and Kiss Me) leaves the Navy after many years, soon reunites old friends and begins to start his new civilian life. His friend Rich (Bruce L Hart) tries to set him up with ruggedly handsome Josh (Ian Roberts-a former Australian professional rugby player, actor and model-Cedar Boys, Superman Returns, Little Fish). While there is immense chemistry between the two, timing and certain ideals never seem to align. When a shocking tragedy happens the two are paired up to pick up the pieces and sort through the after effects. Saltwater is a story about men of all ages, finding love, losing friends, navigating their way through life and knowing it's the journey rather then the destination that's important.",
"genres": [
"Romance",
"Drama"
],
"poster": "https://image.tmdb.org/t/p/w500/bDnLdYqpH9abHo4ASMPKiInx8dm.jpg",
"release_date": 1342310400,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 1,
"weightedRankingScore": 0.966931216931217,
"remote": "1"
}
},
{
"id": 142061,
"title": "Batman: The Dark Knight Returns, Part 2",
"overview": "Batman has stopped the reign of terror that The Mutants had cast upon his city. Now an old foe wants a reunion and the government wants The Man of Steel to put a stop to Batman.",
"genres": [
"Action",
"Animation",
"Mystery"
],
"poster": "https://image.tmdb.org/t/p/w500/arEZYd6uMOFTILne9Ux0A8qctMe.jpg",
"release_date": 1357171200,
"_federation": {
"indexUid": "mieli",
"queriesPosition": 0,
"weightedRankingScore": 0.8697089947089947,
"remote": "1"
}
}
],
"processingTimeMs": 247,
"limit": 5,
"offset": 0,
"estimatedTotalHits": 97,
"requestUid": "019bbd3a-5106-70e0-94fc-f58b2f0c28c8",
"remoteErrors": {}
}
- Facet search referencing
useNetworkare not supported - The chat route cannot use
useNetworkat the moment: doing so is not trivial implementation-wise, because chat route expects to be able to open the index (to fetch chat configs), but federated search only opens the indexes once during a short critical section.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6101
Pass federation.page and federation.hitsPerPage with the same meaning as in a regular search request to use exhaustive pagination in the federated search
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6101
The settings indexer is more efficient when users are removing searchable attributes from the searchable fields.
By @VedantMadane in https://github.com/meilisearch/meilisearch/pull/6109
Solves a low-severity timing attack vulnerability on key comparison by using constant-time comparison
By @curquiza in https://github.com/meilisearch/meilisearch/pull/6077
- Remove openssl from deps by @dureuill in https://github.com/meilisearch/meilisearch/pull/6117
- Fix geo-types version to avoid multiple rstar deps by @dureuill in https://github.com/meilisearch/meilisearch/pull/6118
❤️ Thanks again @VedantMadane for the contribution to this release!
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.33.1...v1.34.0
v1.33.1 🐞
In Meilisearch v1.33.1, we released a security fix that affected the dump import, improvements to vector store relevance in massive databases, and a fix related to ranking scores.
- Cloud users: you don't need to do anything. We found no evidence of exploitation of this vulnerability on Meilisearch Cloud.
- Open-source users: if you allow importing dumps from an untrusted source, we recommend you update to v1.33.1
All versions of Meilisearch before v1.33.0 are vulnerable to a path traversal vulnerability involving the dump import functionality.
Importing a specially crafted dump could result in giving access to the Meilisearch instance to arbitrary, specifically formatted files, present on the file system of the Meilisearch instance.
- We updated the vector store to trigger linear scanning even on bigger databases, leading to improved performance and so better result quality when the search cutoff is reached. This applies in particular when the number of filtered candidates is small relative to the number of documents in the index by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6113.
- We fixed a bug where only the first non-blocking buckets were taken for the non-final ranking rules. This improves the quality of search results when the search cutoff triggers, especially when vector search and a sort are involved by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6113.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.33.0...v1.33.1
v1.33.0 🐞
-
Add
/fieldsroute to get all the fields of an index by @YoEight in https://github.com/meilisearch/meilisearch/pull/6082 Adds a new POST /indexes/{indexUid}/fields endpoint that returns detailed metadata about all fields in an index. This endpoint provides comprehensive information about each field's configuration, including display, search, filtering, and localization settings. -
Implement parallel cleanup of old field IDs by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6100 We reduce the time required to perform the dumpless upgrade for instances before v1.32.0 by multi-threading database fetches. By doing that, we noticed improvements from 2 hours and 50 minutes to a bit less than 7 minutes.
- Meilisearch can now rescale when the index reaches 2 TB by @Vipul-045 in https://github.com/meilisearch/meilisearch/pull/6095
- Bump hannoy to 0.1.4-nested-rtxns by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6103 We updated our internal vector store to speed up the dumpless upgrade by improving the graph rebuilding and improving the speed and relevance of the search by using the explore factor as a limit to stop document searches rather than the query limit.
- Upgrade mini-dashboard to benefit security vulnerability fixes by @curquiza in https://github.com/meilisearch/meilisearch/pull/6091
- Fix tests by @dureuill in https://github.com/meilisearch/meilisearch/pull/6090
- Add verbose OpenAPI schema descriptions for documentation by @qdequele in https://github.com/meilisearch/meilisearch/pull/6071
- Add code samples to the generated openAPI file by @curquiza in https://github.com/meilisearch/meilisearch/pull/6028
Thank you @Vipul-045 for your first contribution ❤️
{ "leader": "ms-00", "self": "ms-01", "remotes": { "ms-00": { /* .. */ }, "ms-01": { /* .. */ } } }