v1.46.0 🦆
This release introduces fixes for a regression in v1.45.0, where we were batching deletions by filter with other deletions or additions. It also enables the new settings indexer to support more parameters, making the engine faster to index documents when those settings are specified.
-
Support exact and disable on numbers in the new settings indexer by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6398 Introduce support for exact words and disable-on-words parameters in the new settings indexer, making the engine more efficient when changing these settings.
-
Support computing prefixes in the new settings indexer by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6391 Support for the prefix search settings in the new settings indexer, so that changing this parameter makes the engine more efficient.
-
Better limit read bytes when creating the S3 multipart part by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6405 This fixes an issue we had with the multipart part size by ensuring we never construct a part larger than the defined multipart part size. With this fix, we always create a multipart with the provided multipart part size, except for the last part. Thanks, @vidit-virmani, for the help investigating the issue.
-
Batch of
documentDeletionByFilterwithdocumentAdditionOrUpdateby @Kerollmops and @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6415 Correctly implement the support for auto-batching deletion by filter with document replacement and updates. This fixes a regression introduced in v1.45.0. -
Fix a panic with incomplete filters by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6421 Fixes an internal panic when a filter is incomplete by returning an error instead.
- Bump tar from 0.4.45 to 0.4.46 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6418
- OpenAPI CI: disable rule to avoid crash (workaround) by @curquiza in https://github.com/meilisearch/meilisearch/pull/6417
- Remove milli benchmarks by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6419
- Add precision in the index swap documentation by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6408
- Fix broken links in the documentation by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6406
v1.45.2 🦒
- Fix internal vector stores quantization config desync by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6411 We noticed issues when dumpless upgrading databases containing embedders from versions older than v1.33.1. This version fixes those databases by removing the corrupted embeddings from the impacted indexes.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.45.1...v1.45.2
v1.45.1 🦒
- Revert autobatch deletions by filter with additions by @kerollmops in https://github.com/meilisearch/meilisearch/pull/6412
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.45.0...v1.45.1
v1.45.0 🦒
Meilisearch v1.45.0 mainly improves indexing performance when changing settings and also improves document fetch performance.
- Autobatch deletions by filter with additions by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6389 While Meilisearch tries to improve indexing speed when users add documents and mix those additions with deletions via a filter, it is still an anti-pattern to interleave both. It is recommended to delete documents by ID whenever possible, as the engine is optimized to merge them, thereby drastically speeding up indexation.
- Improve settings indexing performance & visibility We are introducing support for more settings in the nez settings indexer. If you find any bugs, please report them on GitHub. You can disable the new settings indexer by setting the environment variable like this:
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS=trueor use the equivalent dedicated CLI parameter.- Support non-extracting parameters by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6393 Changing one of the following settings is now directly handled by the new settings indexer: displayed fields, synonyms, the primary key, authorize typos, min word len one and two typos, max values per facet, sort facet values by, pagination max total hits, search cut off, chat, and foreign keys.
- Support the global facet search by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6390 Meilisearch can use the new settings indexer when the settings change the facet search root boolean parameter.
- Fetching documents no longer blocks the actix worker @dureuill in https://github.com/meilisearch/meilisearch/pull/6402
- Fix an internal error when changing the binary quantization by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6396 We fixed an issue where users were changing the binary-quantized boolean in embedder configurations. The change corrupted the database, making it impossible to change the quantization in the future. Users had to create a binary-quantized embedder from scratch, or they could never change it again.
- Make timeout test less flaky on Windows by @dureuill in https://github.com/meilisearch/meilisearch/pull/6388
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.44.0...v1.45.0
v1.44.0
Meilisearch v1.44.0 adds remote federated facet search, indexing performance improvements, and other improvements and bugfixes. It also contains a couple of breaking changes, detailed below.
- When using the
networkexperimental feature, with sharding enabled (leaderis notnullin the network configuration),POST /indexes/{indexUid}/facet-searchcalls now default to a remote federated facet search, fetching and merging results from all shards in the network. - The timeout for calling an external REST embedder at search time is now tied to the
searchCutOffMsdefined in the index, rather than fixed.- If you observe missing semantic results after upgrading, or HTTP 500 errors for pure semantic search, please increase the value of the search cutoff in the index settings.
- By @dureuill in https://github.com/meilisearch/meilisearch/pull/6377
Meilisearch now has the ability to search across all shards of a network during facet search via the existing dedicated facet search route.
- If you are using the
networkexperimental feature and have aleaderdefined for your network, remote calls are now the default for calls toPOST /indexes/{indexUid}/facet-search - The behavior can be controlled explicitly via the new
useNetworkparameter of the facet search object.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6375
Reduces allocated memory when computing prefixes and speeds up some operations to avoid unnecessary deserialization.
If you still see high memory usage while the engine is post-processing, we recommend using the --experimental-reduce-indexing-memory-usage option.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6334
This PR upgrades the cellulite library to a version that includes a GeoJSON indexing optimization. With this change, GeoJSON indexing avoids reprocessing documents that were already indexed in dense cells, and only handles newly added documents incrementally as they descend through the recursive cell tree.
By @YoEight in https://github.com/meilisearch/meilisearch/pull/6374
Adds two new query parameters to GET /indexes/{indexUid}/stats and GET /stats:
showInternalDatabaseSizes: boolean, optional, defaults tofalse. When present, the index stat objects in responses of the stat routes now contain an additionalinternalDatabaseSizeskey, whose value is a dictionary of the internal database names and their current size in the index, like in the stats object of a batch.sizeFormat:humanorraw: optional, defaults toraw. When present and set tohuman, then all database sizes in responses of the stat routes will be returned as a string containing an appropriate unit (MiB, GiB, etc). When missing or set toraw, then the current behavior of expressing the size in bytes as a number is retained.
Note for integrations: The keys in internalDatabaseSizes are subject to change and should not be exposed as a strongly typed object. This is the same as the existing internalDatabaseSizes in batch stats.
Adding showInternalDatabaseSizes to an index stats
showInternalDatabaseSizes to an index stats
Adding showInternalDatabaseSizes and sizeFormat=human to global stats
showInternalDatabaseSizes and sizeFormat=human to global stats// curl -X GET "http://localhost:7700/stats?showInternalDatabaseSizes=true&sizeFormat=human"
{
"databaseSize": "351.38 MiB",
"usedDatabaseSize": "350.64 MiB",
"lastUpdate": "2026-04-16T13:07:02.74243Z",
"indexes": {
"comics": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": "23.14 MiB",
"avgDocumentSize": "751 B",
"isIndexing": false,
"internalDatabaseSizes": {
"wordPairProximityDocids": "98.06 MiB",
"documents": "23.14 MiB",
"wordPositionDocids": "17.22 MiB",
"wordFidDocids": "10.36 MiB",
"wordPrefixPositionDocids": "9.47 MiB",
"wordDocids": "8.97 MiB",
"wordPrefixFidDocids": "4.36 MiB",
"wordPrefixDocids": "3.27 MiB",
"main": "1.36 MiB",
"externalDocumentsIds": "944 KiB",
"fieldIdWordCountDocids": "240 KiB",
"exactWordPrefixDocids": "16 KiB",
"celluliteMetadata": "16 KiB"
},
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
},
"movies": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": "19.64 MiB",
"avgDocumentSize": "636 B",
"isIndexing": false,
"internalDatabaseSizes": {
"wordPairProximityDocids": "96.16 MiB",
"documents": "19.64 MiB",
"wordPositionDocids": "17.83 MiB",
"wordFidDocids": "10.22 MiB",
"wordPrefixPositionDocids": "9.78 MiB",
"wordDocids": "9.02 MiB",
"wordPrefixFidDocids": "4.39 MiB",
"wordPrefixDocids": "3.27 MiB",
"main": "1.36 MiB",
"externalDocumentsIds": "976 KiB",
"fieldIdWordCountDocids": "240 KiB",
"exactWordPrefixDocids": "16 KiB",
"celluliteMetadata": "16 KiB"
},
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
}
}
}
The call without any parameters is the same as in previous versions.
// curl -X GET "http://localhost:7700/stats"
{
"databaseSize": 368443392,
"usedDatabaseSize": 367673344,
"lastUpdate": "2026-04-16T13:07:02.74243Z",
"indexes": {
"comics": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": 24264704,
"avgDocumentSize": 751,
"isIndexing": false,
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
},
"movies": {
"numberOfDocuments": 31944,
"rawDocumentDbSize": 20594688,
"avgDocumentSize": 636,
"isIndexing": false,
"numberOfEmbeddings": 0,
"numberOfEmbeddedDocuments": 0,
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
}
}
}
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6338
- Settings changes performed via a settings subroute (not the "all settings" route) are now correctly propagated to other remotes on the network. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6380
- The chat route no longer fails in some condition when using Mistral as a provider. By @renezander030 in https://github.com/meilisearch/meilisearch/pull/6327
- Prevent accidentally renaming a remote when modifying the network configuration. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6370
- Replace boolean by PatternMatch for searchable by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6344
- Add query to federated search metadata by @StephaneRob in https://github.com/meilisearch/meilisearch/pull/6371
- Remove issue template for feature issues by @curquiza in https://github.com/meilisearch/meilisearch/pull/6372
- Improve the documentation of the health route by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6376
- @renezander030 made their first contribution in https://github.com/meilisearch/meilisearch/pull/6327
- @quyentonndbs made their first contribution in https://github.com/meilisearch/meilisearch/pull/6382
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.43.1...v1.44.0
v1.43.1
Meilisearch v1.43.1 contains a security fix for an authenticated SSRF vulnerability.
No exploitation was found on Meilisearch Cloud. Cloud users are not required to update.
We recommend that self-hosting users upgrade if they allow third parties to configure Meilisearch instances.
We thank Sion Park (@tldhs1144), who reported the issue and suggested a fix, for improving the security of Meilisearch ❤️
v1.43.0
The new settings indexer, a more efficient version of our internal indexer for index settings modifications, now supports filterable, sortable, facet search, and custom (asc/desc) attributes in addition to the already-supported searchable, exact, proximity precision, and embedders.
- For Meilisearch Cloud users, the new settings indexer is disabled by default and can be enabled on a case-by-case basis for scaling purposes.
- For OSS users, the new settings indexer can be disabled by setting the
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGStotrue.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6124
We reduced the time to generate the internal data structures for the facet search to work. We were previously doing a couple of full scans on the internal entries and replaced these with scans on specific entries, only the ones dedicated to the facet searchable fields.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6325
The GET /health route now returns HTTP 500 after a successful task queue compaction, to signal that Meilisearch should be restarted so that tasks can be enqueued again.
For Meilisearch Cloud users, this ensures that compacting the task queue will automatically restart the instance after the compaction.
Fixes a bug where string facet values appearing in <, <=, >, >= and IN filters were not normalized before comparison to facet values.
This would cause some values in documents (e.g. 2026-01-01T00:00:00) to appear to be higher than their filter counterpart, due to being normalized (e.g. like 2026-01-01t00:00:00).
Thanks to @njaard for reporting the issue ❤️
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6340
Fixes the WordDelta::added_or_deleted_words function.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6350.
Thanks to @vladradin99 and @snurfer0 for reporting the issue in https://github.com/meilisearch/meilisearch/issues/6349 and https://github.com/meilisearch/meilisearch/issues/6324 ❤️
- Introduce a meilitool command to export an index words FST by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6332
- Add riscv64 to release binary matrix via cross-rs by @gounthar in https://github.com/meilisearch/meilisearch/pull/6296
- Fix docs related to task cancelation and deletion by @curquiza in https://github.com/meilisearch/meilisearch/pull/6353
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6303
- Bump actions/setup-node from 4 to 6 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/5964
- Bump thin-vec from 0.2.14 to 0.2.16 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6339
- Bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6304
- Bump rustls-webpki from 0.103.10 to 0.103.13 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6347
- Bump actix-http from 3.11.2 to 3.12.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6348
- Bump sigstore/cosign-installer from 3.10.0 to 4.1.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6301
- Bump supercharge/mongodb-github-action from 1.12.0 to 1.12.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6302
Thanks again @gounthar, @njaard, @vladradin99 and @snurfer0 for your contributions ❤️
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.42.1...v1.43.0
v1.42.1 🦑
By @dureuill and @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6331
- When using the experimental feature "multimodal", removing a fragment would cause an internal error in subsequent search requests
- When using the experimental feature "multimodal", modifying fragments would sometimes cause an internal error at indexing time
regenerate: falsewould be ignored when modifying embedder settings- When a nested field was declared as searchable, it would not be indexed if its parents were not declared as searchable
- Add new CI run that tests the stable settings indexer by @dureuill in https://github.com/meilisearch/meilisearch/pull/6331
v1.42.0 🦑
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6306
We introduce a new fallback system for the sharding and replication enterprise edition feature, along with a way to determine which remote is available. The engine can avoid machines that are unavailable for a period and resume querying them once they're back online.
The following snippet shows what the /network route looks like now that this PR exposes the remote statuses/availabilities.
"remotes": {
"prod2": {
"url": "http://localhost:7702",
"searchApiKey": "mykey",
"writeApiKey": "mykey",
"status": "available"
},
"prod3": {
"url": "http://localhost:7703",
"searchApiKey": "mykey",
"writeApiKey": "mykey",
"status": "unavailable"
}
}
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6314
This enhancement extends the Cross-index document hydration introduced in v1.39.0 by allowing the user to filter on the foreign indexes to retrieve the documents.
📓 Note: This implementation doesn't support a remote sharding environment
TheforeignKeys experimental feature must be activated to use the foreign filters:
curl -X PATCH 'http://127.0.0.1:7700/experimental-features' \
-H 'Content-Type: application/json' \
--data-binary '{"foreignKeys": true}'
To be able to use the foreign filters, the related field must be set as a foreignKey and as a filterableAttribute in /indexes/{index_uid}/settings:
{
// new setting, an array of foreign keys that allows multiple foreign relationships between indexes
"foreignKeys": [
{
// the path in the JSON document containing foreign document ids
"fieldName": "actors",
// the UID of the foreign index containing the documents to fetch during hydration
"foreignIndexUid": "actors"
}
],
// the actors field must be filterable on equality
"filterableAttributes": [
{
"attributePatterns": ["actors"],
"features": {
"facetSearch": false,
"filter": {
"equality": true,
"comparison": false
}
}
}
]
}
On the search route, a new _foreign verb has been introduced and should be used as follows:
{
"q": "<query>",
// filters on the movie index:
// genres = action
// AND
// the foreign documents from the actor index match: birthday STARTS WITH \"1958-\" AND popularity >= 3.5
"filter": "genres = action AND _foreign(actors, birthday STARTS WITH \"1958-\" AND popularity >= 3.5)"
}
Note: nesting foreign filters is not supported and will return an error
- Meilisearch running on
127.0.0.1:7700on thedocument-join-hydrationbranch.
curl -X PATCH 'http://127.0.0.1:7700/experimental-features' \
-H 'Content-Type: application/json' \
--data-binary '{"foreignKeys": true}'
curl -X POST 'http://127.0.0.1:7700/indexes' \
-H 'Content-Type: application/json' \
--data-binary '{"uid": "actors", "primaryKey": "id"}'
curl -X POST 'http://127.0.0.1:7700/indexes' \
-H 'Content-Type: application/json' \
--data-binary '{"uid": "movies", "primaryKey": "id"}'
curl -X POST 'http://127.0.0.1:7700/indexes/actors/documents' \
-H 'Content-Type: application/json' \
--data-binary '[
{"id": 1, "name": "Tom", "familyName": "Hanks", "birthDate": "1956-07-09"},
{"id": 2, "name": "Meryl", "familyName": "Streep", "birthDate": "1949-06-22"},
{"id": 3, "name": "Leonardo", "familyName": "DiCaprio", "birthDate": "1974-11-11"},
{"id": 4, "name": "Emma", "familyName": "Watson", "birthDate": "1990-04-15"}
]'
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
-H 'Content-Type: application/json' \
--data-binary '[
{"id": 1, "title": "Forrest Gump", "description": "The presidencies of Kennedy and Johnson, the Vietnam War, the Watergate scandal and other historical events unfold from the perspective of an Alabama man with an IQ of 75.", "actors": [1]},
{"id": 2, "title": "The Devil Wears Prada", "description": "A smart but sensible new graduate lands a job as an assistant to Miranda Priestly, the demanding editor-in-chief of a high fashion magazine.", "actors": [2, 4]},
{"id": 3, "title": "Inception", "description": "A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.", "actors": [3]},
{"id": 4, "title": "Cast Away", "description": "A FedEx executive undergoes a physical and emotional transformation after crash landing on a deserted island.", "actors": [1]}
]'
curl -X PATCH 'http://127.0.0.1:7700/indexes/movies/settings' \
-H 'Content-Type: application/json' \
--data-binary '{"foreignKeys": [{"fieldName": "actors", "foreignIndexUid": "actors"}], "filterableAttributes": [{"attributePatterns": ["actors"],"features": {"facetSearch": false,"filter": {"equality": true,"comparison": false}}}]}'
curl -X PATCH 'http://127.0.0.1:7700/indexes/actors/settings' \
-H 'Content-Type: application/json' \
--data-binary '{"filterableAttributes": [{"attributePatterns": ["birthDate"],"features": {"facetSearch": false,"filter": {"equality": true,"comparison": false}}}]}'
curl -X POST 'http://127.0.0.1:7700/multi-search' \
-H 'Content-Type: application/json' \
--data-binary '{
"queries": [
{
"indexUid": "movies",
"q": "Forrest",
"filter": "_foreign(actors, birthDate = \"1956-07-09\")"
}
],
"federation": {
"limit": 20,
"offset": 0
}
}'
The federated search should return movie documents with the actors array automatically hydrated with full actor objects instead of just IDs:
{
"hits": [
{
"id": 1,
"title": "Forrest Gump",
"description": "...",
"actors": [
{
"id": 1,
"name": "Tom",
"familyName": "Hanks",
"birthDate": "1956-07-09"
}
],
"_federation": {
"indexUid": "movies",
"queriesPosition": 0,
"weightedRankingScore": 0.9848484848484849
}
}
],
"processingTimeMs": 208,
"limit": 20,
"offset": 0,
"estimatedTotalHits": 1
}
-
Fix a race condition when writing network by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6300
We fixed a race condition in network topology changes that could cause errors and prevent documents from being correctly indexed. Additionally, we fixed a bug in the
networkTopologyChangetask batching that was causing it to batch too many task types. We made sure it only batches import tasks, and only those, to avoid out-of-order task processing. -
Throw document template errors when updating the chat settings by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6321
We fixed an issue that prevented the engine from explicitly showing the possible document template errors users could encounter when updating the template in the chat settings. The engine now correctly checks for and throws template errors when they are detected.
-
Fix: Update Index tasks will be properly forwarded to remote nodes by @dureuill in https://github.com/meilisearch/meilisearch/pull/6299
-
Fix action mistake on the chat completions route by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6290
-
Use the latest version of heed with nested rtxns support by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6316
This PR bumps the versions of crates that use heed to the latest version, v0.22.1. This version finally stabilized a long-standing piece of work we were doing with Howard Chu: nested read transactions. We no longer have to rely on unstable pre-releases, but rather on a clean, stable version of LMDB (still a fork, but a better one).
-
Add section to CONTRIBUTING.md to bump mini-dashboard version and testing section to right place by @curquiza in https://github.com/meilisearch/meilisearch/pull/6195
-
Make the no-agent AGENTS.ms more permissive by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6260
-
Remove deleted test commands by @Strift in https://github.com/meilisearch/meilisearch/pull/6283
-
Fix OpenAPI schema generation for chat completions route by @qdequele in https://github.com/meilisearch/meilisearch/pull/6274
-
Rename OpenAPI route names for search rules and compact by @qdequele in https://github.com/meilisearch/meilisearch/pull/6298
-
Update README with new features and demos by @qdequele in https://github.com/meilisearch/meilisearch/pull/6297
-
Prevent shell injection in benchmark workflows by @curquiza & @Kerollmopsin https://github.com/meilisearch/meilisearch/pull/6308 & https://github.com/meilisearch/meilisearch/pull/6318
-
Rename some of the search performance traces by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6323