chore(deps): update getmeili/meilisearch docker tag to v1.55.0 #33
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "renovate/getmeili-meilisearch-1.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
v1.13.3→v1.55.0Release Notes
meilisearch/meilisearch (getmeili/meilisearch)
v1.55.0: 🔭Compare Source
🌈 Improvements
Preview the effect of a dynamic search rule
Apply an inline-specified dynamic search rule to a search query.
Search query objects in the following endpoints now have an additional, optional
inlineRuleparameter.When present and not
null, then Meilisearch will check if query satisfies the conditions of the dynamic search rule specified ininlineRule, and if so will apply the actions of the rule as if it had been sent to thePATCH /dynamicSearchRule/{:uid}endpoint.Additionally, if the
Meili-Include-Metadataheader is present in the request with the valuetrue, then themetadatain 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
inlineRulerequires Meilisearch Enterprise Edition and thedynamicSearchRulesexperimental feature.By @dureuill in #6669
Details
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}POST /indexes/{:indexUid}/searchbody has an additional, optional (defaults tonull)inlineRulefield which is anInlineRuleobject.POST /multi-searchbody, the objects inside thequeriesarray have an additional, optional (defaults tonull)inlineRulefield which is anInlineRuleobject.Examples
Passing a search rule specific to the user making the request
Previewing the effect of a search rule
Response:
Improve
showPerformanceDetailsat search timeWhen setting
showPerformanceDetailstotruein a search request, the response'sperformanceDetailswill now display an entry for the facet distribution computation.New trace entries
Request
Response
Three additional steps:
By @ManyTheFish in #6644
🦋 Fixes
Avoid panic at search time during formatting
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 #6673
Fix search performance of ranking score threshold
To avoid a performance sink when using the
rankingScoreThresholdparameter 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 #6661
Prevent unsupported
binaryQuantizationdeactivation in embedder settingsSince 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: nullin a setting update. This now results in an error.By @dureuill in #6656
🔩 Miscellaneous
unreachable!()code paths with static typing by @dureuill in #6670Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.54.3...v1.55.0
v1.54.3Compare Source
This release contains an important stability fix for Meilisearch. Update from v1.54.2 is recommended.
See #6658 for details
v1.54.2Compare Source
Meilisearch v1.54.2 contains an important fix for users of the
dynamicSearchRuleexperimental feature.🦋 Fixes
v1.54.1Compare Source
🪲 Bug fixes
🔩 Miscellaneous
v1.54.0Compare Source
💥 Breaking Changes
Meilisearch v1.54.0 makes breaking changes to the
dynamicSearchRulesexperimental features.--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
weight: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 ⚠️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 appliedtotalWeight: the total multiplicative factor computed as the product of the individual.actions[].weight.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
Boosting "Batman" product for a festival
Demoting out-of-stock products
Hiding discontinued products
By @dureuill in #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
mcpRouteexperimental feature to use the feature.by @Kerollmops in #6629
Improve search performance details in multi-search
The performance details in a federated search now separate the timing per query
Example
By @ManyTheFish in #6631
🔩 Miscellaneous
HashMaptransmute in indexer by @dureuill in #6622lruto 0.18.4 by @Kerollmops in #6633actions/setup-gofrom 6.5.0 to 7.0.0 by @dependabot[bot] in #6611New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.53.2...v1.54.0
v1.53.3Compare Source
This release contains an important stability fix for Meilisearch. Update from v1.53.2 is recommended.
See #6658 for details
v1.53.2: 🖇️Compare Source
🪲 Bug fixes
🔒 Security
🔩 Miscellaneous
New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.53.1...v1.53.2
v1.53.1: 🖇️Compare Source
✨ Enhancement
Add an env var to change the task queue readers
Control the maximum number of LMDB read transactions at the same time for the task queue.
The following environment variable can be exported to specify the maximum number of simultaneous read transactions:
Product discussion: https://github.com/orgs/meilisearch/discussions/806
🔩 Miscellaneous
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.53.0...v1.53.1
v1.53.0: 🖇️Compare Source
✨ Enhancement
Sharding for foreign filters by @ManyTheFish in #6517
The foreign filter now supports sharding by retrieving the documents through the network when evaluating the foreign filters and hydrating the documents.
The limit of documents that a foreign filter can retrieve has been increased from 100 to 1000.
Adds
indexSizeandusedIndexSizereturned byGET /indexes/{index_uid}/statsand inGET /statsby @tpayet in #6563🔒 Security
🔩 Miscellaneous
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.51.0...v1.53.0
v1.52.4Compare Source
This release contains an important stability fix for Meilisearch. Update from v1.52.3 is recommended.
See #6658 for details
v1.52.3: 🐠Compare Source
🪲 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.52.2...v1.52.3
v1.52.2: 🐠Compare Source
🪲 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.52.1...v1.52.2
v1.52.1: 🐠Compare Source
🪲 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.52.0...v1.52.1
v1.52.0: 🐠Compare Source
✨ Enhancement
/tasks/streamand/batches/streamSSE routes by @Kerollmops in #6533This experimental feature allows establishing a live connection to the engine, avoiding the need to implement long polling and instead letting the engine provide new tasks, batches, and batch progress in a push-based manner. Using this route can drastically reduce network load when retrieving the status of a Meilisearch instance.
We improve the search speed when it comes to formatting the documents by making an
O(n)operation, wherenis the number of retrieved documents, become anO(1)operation. This improvement can significantly increase search speed when requesting a large (> 20) number of documents.🪲 Bug fixes
v1.51.0: 👽Compare Source
✨ Enhancement
New
filterrule activation conditionNew
lastUpdatedAtfieldRules are listed with the most recently updated first
New environment variables
Speed up search requests by @Kerollmops in #6528
Improves Meilisearch search speed by avoiding unnecessary internal work. We drastically reduced the number of times we retrieve data from disk to a single time across the whole search pipeline. This improvement will have the greatest effect on datasets with a large number of distinct fields across documents. We have seen search speeds up to 5.4x on a dataset with more than 14k different fields.
Stabilize dumpless upgrade by @curquiza in #6486
⚠️ Breaking change following the stabilization of an experimental feature ⚠️
The flag
—-experimental-dumpless-upgradeis renamed—-upgrade-db, keeping the exact same behavior.Remove unused experimental features by @curquiza in #6489
⚠️ Breaking change: removing the following experimental features ⚠️
--experimental-replication-parametersbecause outdated. We now have another way to handle replication.--experimental-no-edition-2024-for-dumps. This flag existed to prevent bugs related to our new indexer, which is now stable.--experimental-no-snapshot-compactionbecause it's not useful anymore.🪲 Bug fixes
🔩 Miscellaneous
New Contributors
v1.50.0: 🐐Compare Source
Meilisearch v1.50 revamps the Dynamic Search Rules, adds support for federated document fetch in sharded configurations, among other improvements
Breaking changes
This release introduces breaking changes for users using some experimental features
dynamicSearchRulesexperimental featureRequest type changes
priorityhas been replaced withprecedence, which better reflects the behavior (lower precedence means the rule is applied first)conditionshas been modified from an array to an object with two fields: "query" of typeQueryConditionand "time" of timeTimeConditionQueryConditionthat contains the fieldsisEmpty(as previously) andwordsinstead ofcontains(same type)isEmpty: falsewithwordsin aQueryCondition. PassingisEmpty:truewithwordsstill results in a synchronous error.TimeConditionwith fieldsstartandend(unchanged semantics from previous type).selectorof anAction, it is now mandatory to specify anid. Previously, it was optional, but the action would never trigger.POST /dynamic-search-rules,filter.attributePatternshas been replaced withfilter.query, an optional string that searches in ruledescriptionandconditions.query.words.DELETE /dynamic-search-rules/{:ruleUid}orPATCH /dynamic-search-rules/{:ruleUid}in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.Response changes
PATCH /dynamic-search-rules/{:ruleUid}andDELETE /dynamic-search-rules/{:ruleUid}now register an asynchronous task..{:ruleUid}portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior ofDELETE /indexes/{:indexUid}/documents/{:docId}for{:docId}networkexperimental featureThe default behavior for users using the network experimental feature with sharding configured (
leadernotnull) will change on the following routes:indexes/:uid/documentsindexes/:uid/documents/:document_idindexes/:uid/documents/fetchMeilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set
useNetworktofalsewhen making their request.🌈 Improvements
Scaling up the Dynamic Search Rules
Additions
DELETE /dynamic-search-ruleroute that deletes all the DSRsMEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS: max number of words considered inside of a search query for the purpose of findingconditions.query.wordsconstraints. Defaults to 10, max value is 255MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES: max number of active rules whose actions are evaluated. Defaults to 1000, max value is4294967MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS: max number of pin actions that are applied. Defaults to 100, max value is4294967MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL: max number of constraint combinations that are evaluated for the purpose of findingconditions.query.wordsconstraints. Defaults to 4096, max value is4294967By @dureuill in #6484 and #6506
Behavior changes
conditions.query.wordsbehaves differently fromquery.contains: previously, a rule would match if its conditionsquery.containswould be substrings ofqin the search query in the sense ofstr::contains. Now, a rule matches if all the words inconditions.query.wordsappear inq(after normalization). Forq = hero super,query.contains = super herowould not match, whereasconditions.query.words = super herodoes now match. This behavior is more in line with regular search, and allows improving performance.Federated document fetch routes
GET
indexes/:uid/documents, GETindexes/:uid/documents/:document_idand POSTindexes/:uid/documents/fetchwill now fetch the documents from all the shards in the configured network.Moreover, a new
useNetworkparameter is available to activate or deactivate the usage of the network.By @ManyTheFish in #6495
Support partial wildcards when requesting facets
The
facetsparameter in search and federated search now supports more wildcards. Previously, only the single wildcard"*"was supported, requesting all filterable fields.Now, patterns containing
*are supported with the same matching rules as infilterableAttributes.attributePatternsandlocalizedAttributes.attributePatterns, such asdogs.*, which will add to the facet distribution all filterable fields that match the pattern (such asdogs.intel,dogs.kefir, etc.).By @Kerollmops in #6497
🦋 Fixes
Fix migration from v1.48 and earlier
Migration via
--experimental-dumpless-upgradewould fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as&).Such synonyms are now ignored during migration, avoiding the issue.
By @Kerollmops in #6501
Fix filter memory consumption in some cases
In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.
By @ManyTheFish in #6509
No longer reject some correctly-escaped filters
Fix a bug where some filters containing escaped characters (such as \) would cause search requests to fail with invalid_search_filter
By @dureuill in #6499
More fault-tolerant S3 snapshots
Potentially fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.
By @Kerollmops in #6494
🔩 Miscellaneous changes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.49.0...v1.50.0
v1.49.0: 🪺Compare Source
✨ Enhancement
We improve synonyms' performance by changing how we store and retrieve them during query processing. Users may have experienced performance issues when the number of synonyms in an index was high, resulting in a significant impact on search performance. The Meilisearch support team advised moving the settings and synonyms-as-keywords to the dedicated documents. This is no longer an issue; synonyms are loaded lazily, only when a word matches a synonym. You can see performance improvements of up to 13x, depending on the number of synonyms.
🔩 Miscellaneous
v1.48.3: v1.48.3 🫎Compare Source
🪲 Bug fixes
Fix a rare S3 snapshots bug by @Kerollmops in #6472
We fixed a rare bug that could appear when using the S3 snapshot system. The bug is a race condition that occurs when we try to recycle internal buffers to reduce memory usage, which can cause an internal error and abort the snapshot upload.
Avoid remote search to return the same document twice by @ManyTheFish in #6473
When using the remote federated search, Meilisearch was returning the same document twice from different machines. This was due to an internal filter that was not forwarded properly to the remote instances.
🔩 Miscellaneous
New Contributors
Thanks to @0xfandom, who made his first contribution in #6468 🎉
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.48.2...v1.48.3
v1.48.2: 🫎Compare Source
Meilisearch v1.48.2 and Meilisearch v1.47.1 address CVE-2026-57823 and CVE-2026-57824.
We recommend updating if you are in one of the following situations:
indexesis not["*"]and whereactionscontains more permissions than:["search", "documents.*", "indexes.*", "tasks.cancel", "tasks.delete", "tasks.get", "settings.*", "stats.*", "fields.post"]These versions both fix the following:
We detected no trace of exploitation of these vulnerabilities.
We thank PuH4ck3rX for reporting these vulnerabilities ❤️
v1.48.1: 🫎Compare Source
Revert #6432 due to a dumpless upgrade bug report.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.48.0...v1.48.1
v1.48.0: 🫎Compare Source
✨ Enhancement
[Experimental] Render 🫎 template route
Introduces a new
POST /render-templateroute that can be used to render any template or fragment on any input and associatedrenderRouteexperimental feature that gates access to the route.This route can be used to test document templates and fragments before and after having configured an embedder.
A body payload for the route is of the form:
where
templatedescribes the template or fragment to render, andinputdescribes what to use to render the template.Upon calling this route, Meilisearch responds with:
where
templatecontains the unrendered base text of the document template, or the unrendered base JSON object of a fragment, andrenderedcontains the result of rendering the template of the chosen input.If
inputisnullin the request, thenrenderedisnullin the response, and the route can be used solely to retrieve a template or fragment from the settings of an index.Before calling the route
The API of this route is subject to change, so before calling this route, please enable the
renderRouteexperimental feature:Examples
request
response
request
response
request
response
request
response
request
response
request
response
[Experimental] Only support foreign filters on retrieval routes
Foreign filters are meant to be used in a retrieval context (search, get document...), but all the actions related to writing or modifying a document could have several unexpected behaviors if foreign filters are accepted.
We prefer forbidding the usage of this feature on the writing routes.
The following routes do not support Foreign-filter anymore:
/indexes/{index_uid}/documents/edit/indexes/{index_uid}/documents/delete/export🪲 Bug fixes
🔒 Security
🔩 Miscellaneous
queueDocumentsFetchexperimental feature withdisableDocumentsFetchQueueconverting the feature from an opt-in to an opt-outBy @ManyTheFish in #6456
❤️ Thanks again to @genisis0x and @antcybersec
v1.47.1: 🦇Compare Source
Meilisearch v1.48.2 and Meilisearch v1.47.1 address CVE-2026-57823 and CVE-2026-57824.
We recommend updating if you are in one of the following situations:
indexesis not["*"]and whereactionscontains more permissions than:["search", "documents.*", "indexes.*", "tasks.cancel", "tasks.delete", "tasks.get", "settings.*", "stats.*", "fields.post"]These versions both fix the following:
We detected no trace of exploitation of these vulnerabilities.
We thank PuH4ck3rX for reporting these vulnerabilities ❤️
v1.47.0: 🦇Compare Source
🌈 Enhancements
Search personalization on federated search
We now support using the search personalization feature on federated search requests.
Like
page/hitPerPageorlimit/offset, the personalization option must be specified in the federation attribute to work properly.Otherwise, an error will be returned reminding you to move the attribute in federation.
By @ManyTheFish in #6414
The new settings indexer is feature complete 🎉
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGSenvironment variable totrue, all settings tasks can now be handled by the new settings indexer, bringing a better scaling behavior, much faster cancellation, and a more precise progress view.By @Kerollmops in #6409
Observability improvements
We expose more Prometheus metrics to improve observability, specifically to show more metrics on document throughput and ease debugging.
By @Kerollmops in #6430
🦋 Fixes
searchCutoffMsin some conditions when embedding documents, by @dureuill in #6447'during remote federated search oruseNetwork: truesearch requests, by @dureuill in #6445🔒 Security
🔩 Misc. changes
Search implementation refactor
Refactor the search pipeline to mutualize the code.
The new implementation will always perform a federated search under the hood, and then the output will be transformed into the expected route's output.
Noticeable changes from the user perspective:
MultiSearch<Error><-->Search<Error>Other changes
vectorStoreBackendsetting from the settings, by @Kerollmops in #6399MustStopProcessingtype everywhere by @Kerollmops in #6423New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.46.1...v1.47.0
v1.46.1: 🦆Compare Source
Queue documents fetch routes
Add an experimental feature,
queueDocumentsFetch, forcing the routesGET indexes/:uid/documentsandPOST indexes/:uid/documents/fetchto wait in the search queue if there is no available thread to process them.v1.46.0: 🦆Compare Source
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.
✨ Enhancement
Support exact and disable on numbers in the new settings indexer by @Kerollmops in #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 #6391
Support for the prefix search settings in the new settings indexer, so that changing this parameter makes the engine more efficient.
🪲 Bug fixes
Better limit read bytes when creating the S3 multipart part by @Kerollmops in #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 #6415Correctly 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 #6421
Fixes an internal panic when a filter is incomplete by returning an error instead.
🔒 Security
🔩 Miscellaneous
v1.45.2: 🦒Compare Source
🪲 Bug Fixes
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: 🦒Compare Source
🪲 Bug Fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.45.0...v1.45.1
v1.45.0: 🦒Compare Source
Meilisearch v1.45.0 mainly improves indexing performance when changing settings and also improves document fetch performance.
✨ Enhancement
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.
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.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.
Meilisearch can use the new settings indexer when the settings change the facet search root boolean parameter.
🪲 Bug Fixes
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.
🔩 Miscellaneous
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.44.0...v1.45.0
v1.44.0Compare Source
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.
Breaking changes
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.searchCutOffMsdefined in the index, rather than fixed.🌈 Improvements
Remote facet search
Meilisearch now has the ability to search across all shards of a network during facet search via the existing dedicated facet search route.
networkexperimental feature and have aleaderdefined for your network, remote calls are now the default for calls toPOST /indexes/{indexUid}/facet-searchuseNetworkparameter of the facet search object.By @dureuill in #6375
Reduce memory usage of the indexing
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-usageoption.By @Kerollmops in #6334
Improve GeoJSON indexing performance
This PR upgrades the
cellulitelibrary 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 #6374
Human-formatted sizes and detailed DB sizes in stats
Adds two new query parameters to
GET /indexes/{indexUid}/statsandGET /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
internalDatabaseSizesare subject to change and should not be exposed as a strongly typed object. This is the same as the existinginternalDatabaseSizesin batch stats.Adding
showInternalDatabaseSizesto an index statsAdding
showInternalDatabaseSizesandsizeFormat=humanto global statsThe call without any parameters is the same as in previous versions.
By @dureuill in #6338
🦋 Fixes
🔩 Miscellaneous changes
New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.43.1...v1.44.0
v1.43.1Compare Source
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.0Compare Source
🌈 Enhancements
New settings indexer
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.
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGStotrue.By @Kerollmops in #6124
Improve facet search indexing performance
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 #6325
Improve task queue compaction integration
The
GET /healthroute 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
Fix lexicographic filters on strings
Fixes a bug where string facet values appearing in
<, <=, >, >=andINfilters 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. like2026-01-01t00:00:00).Thanks to @njaard for reporting the issue ❤️
By @dureuill in #6340
Fix typo tolerance v1.41 regression
Fixes the
WordDelta::added_or_deleted_wordsfunction.By @Kerollmops in #6350.
Thanks to @vladradin99 and @snurfer0 for reporting the issue in #6349 and #6324 ❤️
🔩 Miscellaneous
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: 🦑Compare Source
🪲 Bug fixes
Fix issues when using the legacy settings indexer
By @dureuill and @ManyTheFish in #6331
regenerate: falsewould be ignored when modifying embedder settings🔩 Miscellaneous
v1.42.0: 🦑Compare Source
✨ Enhancement
Support search fallback on remote unavailability
By @Kerollmops in #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.
🔬 Experimental: Document join Filtering
By @ManyTheFish in #6314
This enhancement extends the
Cross-index document hydration introducedin v1.39.0 by allowing the user to filter on the foreign indexes to retrieve the documents.foreignKeysexperimental featureThe
foreignKeysexperimental feature must be activated to use the foreign filters:foreignKeys+filterindex settingTo 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:filtering using the
_foreignfilterOn the search route, a new
_foreignverb has been introduced and should be used as follows:Example of usage
Prerequisites
127.0.0.1:7700on thedocument-join-hydrationbranch.Step 1: Enable Foreign Keys Feature
Step 2: Create Indexes
Create the
actorsindexCreate the
moviesindexStep 3: Add Documents to the
actorsIndexStep 4: Add Documents to the
moviesIndexStep 5: Configure Foreign Keys on the
moviesIndexStep 6: Configure filterable on the
actorsIndexStep 7: Perform a Federated Search
Expected Result
The federated search should return movie documents with the
actorsarray automatically hydrated with full actor objects instead of just IDs:🪲 Bug fixes
Fix a race condition when writing network by @Kerollmops in #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 #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 #6299
Fix action mistake on the chat completions route by @Kerollmops in #6290
🔩 Miscellaneous
Use the latest version of heed with nested rtxns support by @Kerollmops in #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 #6195
Make the no-agent AGENTS.ms more permissive by @Kerollmops in #6260
Remove deleted test commands by @Strift in #6283
Fix OpenAPI schema generation for chat completions route by @qdequele in #6274
Rename OpenAPI route names for search rules and compact by @qdequele in #6298
Update README with new features and demos by @qdequele in #6297
Prevent shell injection in benchmark workflows by @curquiza & @Kerollmopsin #6308 & #6318
Rename some of the search performance traces by @ManyTheFish in #6323
v1.41.0: 🏈Compare Source
✨ Enhancement
Support dynamic search rules with pinning by @YoEight in #6182
Introduce the Dynamic Search Rules (DSR) experimental feature, making it easy to promote the right content for the right searches with flexible, condition-based pinning. In this first version, rules can be triggered by query-based conditions such as empty queries or literal substring matches, as well as time windows. Multiple documents can be pinned in a defined order, and pins still work with filtering, pagination, facet distribution, hybrid search, and federated search. This feature is behind the
dynamicSearchRulesexperimental feature flag.Rules can be created or updated with
PATCH /dynamic-search-rules/{uid}and removed withDELETE /dynamic-search-rules/{uid}. In this first version, a rule can define query- or time-based conditions and pin specific documents at fixed positions in the results list.Example of rule creation/update
Default to
useNetwork: truein sharded instances by @dureuill in #6278Search requests now use the network by default when (replicated) sharding is enabled
§ Breaking changes
When
network.leaderis set in the instance,useNetworknow defaults totruein search requests when omitted.So, when a network is configured, the following:
Search request without an explicit useNetwork
is now equivalent to a federated search over multiples remotes so that all shards in the network are covered exactly once.
Equivalent federated search request
Responding with documents from all the shards:
Response
This change allows to naturally query all the documents in a sharded context.
When
network.leaderis not present (in particular, when nonetworkwas defined), then the behavior is identical to previous versions.useNetworkpicks local instance if it owns the shard by @dureuill in #6287To prevent unnecessary network activity, when deciding which remote to ask for a shard in a search over the network, Meilisearch will now always pick the local instance if it owns the shard.
More efficient FST building by @Kerollmops in #6279
It improves the construction of the word FST (word dictionary) by removing the need for a full scan of the word docids database. This should drastically improve the database's performance when inserting a large number of documents, even when inserting only a few.
🪲 Bug fixes
🔩 Miscellaneous
New Contributors
v1.40.0: 🦈Compare Source
This release introduced support for the
distinctattribute in federated search, enabling cross-index distinct attributes with facet distribution support. Additionally, significant performance improvements were delivered, including faster federated search (approximately 100ms faster), optimized JSON document generation for better handling of large documents and a much better memory usage for large workloads.✨ Enhancement
Support
distinctin federated search by @dureuill in #6214The
distinctattribute can now be passed to thefederationobject in federated search to apply a global, cross-index and cross-remote distinct computation to the results.Example of a federated search request with distinct
Sample response to a federated search request with distinct
Note the following to apply the distinct attribute at the federation level:
distinctat the query level at the same time as the federation level is disallowed and will return a HTTP 400 error.Improve performance of federated search by @dureuill in #6229
Improves performance of federated search: about 100ms faster for all requests. Improves reliability of the HTTP server: the server will no longer be blocked when too many federated search requests are being processed.
Optimize the generation of JSON documents by @Kerollmops in #6257
Addresses performance issues that users might encounter when requesting large documents. Additionally, performance is enhanced when users request only a small subset of fields from large documents.
Use the latest version of mimalloc to improve memory usage by @Kerollmops in #6201
Updates mimalloc from v2 to v3, improving memory sharing between threads and significantly reducing memory usage on large workloads. It also overrides the allocator to use mimalloc at linking time, allowing LMDB, Meilisearch, and other C libraries to share their allocations for better overall memory efficiency. @Kerollmops wrote a blog post about the story behind this improvement.
Add
POST /tasks/compactfor task queue compaction by @YoEight in #6193Compacts the task queue database and reclaim space so new tasks can keep being enqueued, without deleting existing tasks. This feature is behind the
taskQueueCompactionRouteexperimental feature flag.🔐 Security
🪲 Bug fixes
🔩 Miscellaneous
X-Accel-Buffering: nofor/logs/streamroute by @YoEight in #6268--experimental-allowed-ip-networksparameter by @paulden in #62630.38.4by @GuillaumeGomez in #6211New Contributors
v1.39.0: 🐳Compare Source
What's Changed
✨ Enhancement
🔬 Cross-index document hydration
Add a new
ForeignKeyssetting allowing to hydrate documents with documents coming from other indexes.foreignKeysexperimental featureA new experimental feature,
foreignKeys, has been added to the/experimental-featureroute that must be set to true to activate the hydration.foreignKeysindex settingA new index setting,
foreignKeys, has been added to the/indexes/{index_uid}/settings:Example
With this new feature, a document shaped as follows:
Will be hydrated as follows in a search response:
By @ManyTheFish in #6047
Disable proxy response buffering on Server-Sent Events (SSE)
Add
X-Accel-Buffering: noonPOST /chats/{workspace_uid}/chat/completionswhen the streaming mode is activated.By @YoEight in #6228
🪲 Bug fixes
Fix a memory leak in the indexation pipeline by @Kerollmops in #6212
We fixed an important memory leak caused by an invalid use of bumpalo. If you've seen Meilisearch using more and more memory over time, this issue is no longer visible in the latest version. If you want to read more about the bumpalo-trap we felt in, here is a good summary. It looks like this leak was introduced in v1.12, so approximately a year ago...
Avoid losing tasks by applying deltas on the wtxn view by @Kerollmops in #6222
We addressed a small performance regression introduced in v1.38.1 that affected sending updates to the engine during task deletion. We've restored the task deletion performance to match v1.38.0 levels and ensured no race conditions occur while still allowing updates during deletion.
🔩 Miscellaneous
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.38.0...v1.39.0
v1.38.2: 🐍Compare Source
Meilisearch v1.38.2 fixes a regression introduced in Meilisearch v1.38.0 where Meilisearch could sometimes stop processing tasks after an automatic task queue cleanup performed while more tasks where being added.
We recommend that all users in v1.38.0 and v1.38.1 migrate to v1.38.2.
Note that the dumpless upgrade process can take up to one minute before the HTTP server becomes available when migrating from a previous v1.38 version.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.38.1...v1.38.2
v1.38.1: 🐍Compare Source
Meilisearch v1.38.1 fixes a regression we have seen in task processing, which caused the engine to stop processing tasks.
🪲 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.38.0...v1.38.1
v1.38.0: 🐍Compare Source
Meilisearch v1.38 drastically improves indexing performance for embeddings, cleans up the task queue of orphan tasks and batches, ensures they are correctly deleted now, fixes issues users may encounter with OpenAI or VoyageAI when generating embeddings, and improves the tooling for generating routes in the documentation.
✨ Enhancement
We drastically reduced embedding indexing time by eliminating full database scans. It is more efficient to add a couple of embeddings to a large database now.
🪲 Bug fixes
connection reset by peererrors when embedding documents or search queries using a remote embedder. By @dureuill in #6191🔩 Miscellaneous
The reference API is now generated from the source code, but it used to miss some actix-declared routes. It is now mandatory to attach a route when using the newly-provided
routes::routesandroutes::pathmacros, which ensures the route is added to the reference. Please refer to the documentation of the individual macros and the many examples throughout the codebase for more details.New Contributors
v1.37.0Compare Source
Meilisearch v1.37 introduces replicated sharding, removes the
vectorStoreSettingexperimental feature, stabilizes our new vector store for best performance, adds a security fix and miscellaneous improvements.✨ Improvements
§ Replicated sharding
§ 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-upgradewhenleaderis notnull, such that for each remote: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:
Addition of
network.shardsThe
networkobject for routesPATCH /networkandGET /networknow contains the new fieldshards, which is an object whose values areshardobjects, and keys the name of each shard.Each
shardobject contains a single fieldremotes, which is an array of strings, each string representing the name of an existing remote.Convenience fields
The
shardobjects inPATCH /networkcontain the additional fieldsaddRemotesandremoveRemotesmeant for convenience:shard.addRemotesto add these remotes to the list of remotes of a shard.shard.removeRemotesto remove these remotes from the list of remotes of a shard.null,shard.remoteswill completely override the existing list of remotes for a shard.null, then the order of application isshard.remotes, thenshard.addRemotes, thenshard.removeShards.Adding a new shard with some remotes
Remotes
ms-0andms-1own the new shards-a.Fully overriding the list of remotes owning a shard
ms-2is now the sole owner ofs-a, replacingms-0andms-1.Adding a remote without overriding the list of remotes owning a shard
ms-0andms-2are now the owners ofs-a.Removing a remote without overriding the list of remotes owning a shard
ms-0is now the sole owner ofs-a.Entirely removing a shard from the list of shards
Set the shard to
null:Or set its
remoteslist to the empty list:network.shardsvalidityWhen
network.leaderis notnull, eachshardobject innetwork.shardsmust:remotesthat exist in the list ofremotes.Additionally,
network.shardsmust contain at least one shard.Failure to meet any of these conditions will cause the
PATCH /networkroute to respond with400 invalid_network_shards.Change in sharding logic
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,1and2, and 3 shardsA,B,C, such that each remote owns two shards, achieving replication (losing one remote does not lose any document).useNetworktakesnetwork.shardsinto accountWhen
useNetwork: trueis passed to a search query, it is expanded to multiple queries such that each shard declared innetwork.shardsappears exactly once, associated with a remote that owns that shard.This ensures that there is no missing or duplicate documents in the results.
_shardfiltersWhen the
networkexperimental feature is enabled, then it becomes possible to filter documents depending on the shard they belong to.Given
s-aands-bthe names of two shards declared innetwork.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.
Update instructions
When updating your Meilisearch network using dumpless upgrade, please observe the following guidelines:
PATCH /networkroute until all remotes of the network are finished updatinguseNetwork: 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 #6128
§ Remove
vectorStoreSettingexperimental featureThe 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
vectorStoreSettingexperimental feature is no longer available.By @Kerollmops in #6176
Improve indexing performance for embeddings
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 #6175
§ 🔒 Security
localStorageBy @Strift and @curquiza in #6186 and #6172
§ 🔩 Miscellaneous
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.36.0...v1.37.0
v1.36.0: 🐙Compare Source
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!
✨ Enhancement
Introduce the
attributeRankandwordPositioncriteria by @Kerollmops in #6154, #6155, and #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.🪲 Bug fixes
attributesToSearchOnon an empty index by @zen-zap in #5944🔒 Security
🔩 Miscellaneous
❤️ Thanks to @zen-zap for contributing to this release!
v1.35.1Compare Source
🦋 Bug fixes
Meilisearch v1.35.1 fixes a possible task database corruption issue that would occur when using the S3 streaming snapshot method.
Details
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.0Compare Source
Meilisearch v1.35.0 contains improvements to the observability of the search performance, a breaking change to the recently introduced
POST /indexes/<index_uid>/fieldsroute, and other bugfixes and improvements.🌈 Improvements
Observe the search performance
The search routes accept a new field named
showPerformanceDetails. When set totrue, the search response contains a performance trace, allowing the user to betterunderstand 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>/similarSearch
routes:
POST /indexes/<index_uid>/searchandGET /indexes/<index_uid>/searchRequest
new request parameters:
showPerformanceDetails:true/false(boolean)example
Response
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)example
Multi-search
route:
POST /multi-searchRequest
new request parameters:
queries.showPerformanceDetails:true/false(boolean)example
Response
new response field:
results.performanceDetails:{"<span>": "<human_duration>", .. }(map)example
Federated Search
route:
POST /multi-searchRequest
new request parameters:
federation.showPerformanceDetails:true/false(boolean)example
Response
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)example
Similar
routes:
POST /indexes/<index_uid>/similarandGET /indexes/<index_uid>/similarRequest
new request parameters:
showPerformanceDetails:true/false(boolean)example
Response
new response field:
performanceDetails:{"<span>": "<human_duration>", .. }(map)example
By @ManyTheFish in #6132
Stabilize multithreaded post-processing of facets and prefixes
Multithreaded post-processing of facets and prefixes speeds-up indexing on multi-core machines.
Before v1.35.0, it could be disabled with an experimental feature.
Meilisearch v1.35.0 removes that experimental feature, resulting in the multithreaded post-processing being always enabled.
Cloud users upgrading to v1.35.0 will benefit from the speed-up.
By @ManyTheFish in #6130
🦋 Fixes
Breaking change: return pagination fields in
POST /indexes/<index_uid>/fieldsrouteExample: before/after
Before:
After:
By @ManyTheFish in #6126
POST /indexes/<index_uid>/fields: Fix pattern filtering when a parent field was matching a child pattern:titlewas matching the patterntitle.to*.Example: before/after
For the following request:
Before Response,
titlefield is returned:After Response, nothing returned:
By @ManyTheFish, also in #6126
🐛 Other fixes
🔩 Miscellaneous
New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.3...v1.35.0
v1.34.3Compare Source
🐛 Bug Fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.2...v1.34.3
v1.34.2Compare Source
This patch fixes an accidental breaking change in v1.34.1 where Meilisearch would not start with a configuration file if
experimental_allowed_ip_networkswas not defined.Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.34.1...v1.34.2
v1.34.1Compare Source
In Meilisearch v1.34.1, we released a security fix that affect web queries initiated by Meilisearch.
🔐 Security
In Meilisearch versions v1.8 to v1.34.0, a user with an API key with write permissions to the configuration of the Meilisearch instance could set up Meilisearch to send POST or GET requests to domains and IPs local to the private network of the Meilisearch instance, effectively bypassing the firewall. The vulnerability has not yet been assigned a CVE number; it has CVE Request
1975471for CVE ID.Meilisearch v1.34.1 fixes the vulnerability by forbidding Meilisearch from making any requests to a host resolving to a non-global IP, in the sense of the IANA IPv4 Special-Purpose Address Registry or the IANA IPv6 Special-Purpose Address Registry. If you need this functionality in your Meilisearch instance, you can set private IP networks as allowed with the
--experimental-allowed-ip-networksparameter after reviewing the security implications.This is a breaking change, which is allowed for security reasons.
Allowing non-global IP networks
The
--experimental-allowed-ip-networksCLI flag and theMEILI_EXPERIMENTAL_ALLOWED_IP_NETWORKSenvironment variable control the behavior of Meilisearch with regards to non-global IP networks, with the CLI flag taking precedence over the environment variable when both are specified.192.168.0.0/16,10.0.0.0), then web requests to the networks from the list will be permitted. Web requests to the non-global IPs not part of the list will still be rejected.any, all web requests will be permitted regardless of the target IP, similar to the behavior of Meilisearch v1.34.0 and lower. Use this option when you control both the machine and the configuration of the deployed Meilisearch instance.Acknowledgments
Thanks to Gabriel Rodrigues (aka Texugo), for reporting this vulnerability and for helping us improve the security of Meilisearch.
v1.34.0Compare Source
🌈 Improvements
Easy search over your network of machines
useNetworkfield inPOST /indexes/{:indexUid}/searchThe search query object passed in the body of
POST /indexes/{:indexUid}/searchnow accepts an optional booleanuseNetwork. When present and set totrue, the search is executed "as-if" it was a remote federated search over all remotes in the network.That is, the following:
Search request
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
Resulting in:
Search Response
useNetworkrequires thenetworkexperimental feature to be enabled.useNetworkquery parameter inGET /indexes/{:indexUid}/searchPassing
useNetwork=trueas a query parameter toGET /indexes/{:indexUid}/searchhas the same effect as passinguseNetwork: trueas a field parameter toPOST /indexes/{:indexUid}/search.queries[].useNetworkfield inPOST /multi-searchuseNetworkcan also be passed as a field of the individual queries inside of amulti-searchrequest.POST /indexes/{:indexUid}/searchfor that queryFederated search example:
Multi-search request
Multi-search response
Limitations
useNetworkare not supporteduseNetworkat 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 #6101
Federated search supports
pageandhitsPerPagePass
federation.pageandfederation.hitsPerPagewith the same meaning as in a regular search request to use exhaustive pagination in the federated searchBy @dureuill in #6101
Speed up settings changes when removing searchable
The settings indexer is more efficient when users are removing searchable attributes from the searchable fields.
By @VedantMadane in #6109
🔒 Security
Solves a low-severity timing attack vulnerability on key comparison by using constant-time comparison
By @curquiza in #6077
🔩 Maintenance
Remove some unwanted dependencies
New Contributors
❤️ 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: 🐞Compare Source
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.
🔐 Security Fix
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.
✨ Enhancements
🐛 Bug Fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.33.0...v1.33.1
v1.33.0: 🐞Compare Source
✨ Enhancement
Add
/fieldsroute to get all the fields of an index by @YoEight in #6082Adds a new POST
/indexes/{indexUid}/fieldsendpoint 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 #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.
Bump hannoy to 0.1.4-nested-rtxns by @Kerollmops in #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.
🪲 Bug fixes
🔒 Security
🔩 Miscellaneous
Thank you @Vipul-045 for your first contribution ❤️
v1.32.2: 🐟Compare Source
🐛 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.32.1...v1.32.2
v1.32.1: 🐟Compare Source
🌈 Improvements
Skip cleaning up the field-ID-based databases
Introduce a
MEILI_EXPERIMENTAL_DISABLE_FID_BASED_DATABASES_CLEANUPenv var to opt out of the field ID-based database cleanup when upgrading a Meilisearch from versions inferior to 1.32.0.Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.32.0...v1.32.1
v1.32.0: 🐟Compare Source
🌈 Improvements
Log Search performance trace
Introduces comprehensive progress tracking and logging for search operations in Meilisearch. It adds detailed timing information for each step of the search process, enabling better observability and performance analysis.
Extract document operations from payloads in parallel
We accelerate document indexing by processing a large number of tasks in batches or a large number of records in parallel. We expedited the preparation of the payloads by extracting the various changes and assigning internal IDs in parallel. We achieved a 7x speedup on a four-million-document insertion using four CPUs, and the performance scales with the number of CPUs.
The
indexedDocumentsfield in tasks using skipCreation no longer precisely reflects the number of document operations performed, specifically forPOSTandPUToperations. This count may be higher than the actual number of operations, but it doesn't affect the computation; only the reported count is impacted. We prioritize speed over perfect accuracy here, and the documents are still correctly indexed as before.🐛 Bug fixes
Vector sort: Bucket documents with same similarity
Fixed vector sort bucketing so documents with identical similarity scores are grouped together, ensuring subsequent ranking rules are applied correctly.
Properly Delete Documents from FID-Based Databases
Fixes a bug where changing searchableAttributes from ["*"] to a subset of fields left orphaned data in fid-based databases, causing corruption and warnings during search.
Rebuild the graph links when dumpless-upgrading
Bumps hannoy to v0.1.3-nested-rtxns, which fixes graph-related recall issues and adds a method to rebuild graph links to recover previously malformed graphs. Also fixes a minor issue in the dumpless upgrade flow where the upgrade description was not displayed correctly and related operations were not properly associated with the upgrade.
🛠️ Maintenance and Misc.
Update JS SDKs tests to use
pnpminstead ofyarnUpdated the JavaScript SDK tests to use pnpm instead of yarn in CI workflows, switching the package manager across test configurations to ensure the SDK test suite runs correctly and consistently with the current tooling.
Adapt JS tests in SDK tests CI
Updated the SDK tests CI workflow for the JavaScript SDKs
Bump lru from 0.16.2 to 0.16.3
Fix Stacked Borrows violation in
IterMut.Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.31.0...v1.32.0
v1.31.0: 🦃Compare Source
🌈 Improvements
🗄️ [Enterprise Edition] Make the S3-streaming snapshots an Enterprise Edition feature
The recently introduced S3-streaming snapshots feature is now available as an Enterprise Edition feature. From now on, you'll need a license to use this feature when using Meilisearch as a self-hosted solution. Note that this version introduces a breaking change regarding the S3-streaming snapshot feature, which is no longer available in the Community Edition; however, on-disk snapshots remain accessible. You can read our BUSL license for contact information, if you like. Note that if you are using the Community Edition of Meilisearch between version 1.25 and this release, you can freely use the S3 Streaming feature without an Enterprise Edition license.
🔏 [Enterprise Edition] Support AWS IRSA to authenticate to S3 for snapshotting
We just introduced support for IRSA authentication to do snapshots on AWS. IRSA allows the use of short-lived access and secret keys to upload snapshots through S3. This feature is available under the Enterprise Edition and can be accessed through two experimental CLI parameters.
✍️ Allow strict document update without creating missing documents
Adds an optional
skipCreationboolean query parameter toPOSTandPUTon/indexes/{index}/documents. When set totrue, documents that don't exist in the index are silently ignored rather than created. Default isfalse, preserving existing behavior.🐛 Bug fixes
🛠️ Maintenance and Misc.
v1.30.1: 🐸Compare Source
What's Changed
🐛 Bug Fixes
Fix task attribution during index swap to prevent cross-index task loss by @YoEight in #6059
This change fixes the parenting of the tasks when doing an index swap.
Hotfix: log a warning when FieldidsWeightsMap is missing entry by @ManyTheFish in #6064
This hotfix avoids the encounter of following error during a search request:
🫂 New Contributors
v1.30.0: 🐸Compare Source
🌈 Improvements
Up and down network scaling
Since v1.19.0, Meilisearch Enterprise Edition allows the automatic sharding of documents over multiple Meilisearch instances, enabling scaling to more documents than a single instance would accommodate.
Meilisearch v1.30.0 adds the ability to modify the number of participants in sharding, without having to start over sending documents to a new cluster containing the number of desired machines.
To make this possible, Meilisearch v1.30.0 introduces breaking changes. These breaking changes only affect the users of the experimental
networkfeature who enabled automatic sharding (network.sharding = true). Users of the stable features are not affected.Usage
Setting up the initial network
PATCH /network:Upgrading from v1.29 or earlier
networkinstance withshardingset totrue, then thenetworkobject will be modified so that the leader is the first remote in alphabetic order. For instance, if you network contains remotes:A,B,C, the leader will be set toA.Adding a new remote
PATCH /networkon the leader with the information about the new remote:ms2).networkTopologyChangetask that will "rebalance" the documents between the existing remotes and the new remote, that is,ms0andms1will send parts of their documents toms2Removing a remote
PATCH /networkon the leader by setting any removed remote tonull:ms2that will then no longer participate in the network).networkTopologyChangetask that will "rebalance" the documents between the remaining remotes, that is,ms2will send its documents betweenms0andms1List of changes
List of changes, some of which are breaking
Networkobject returned or edited by the/networkroute is modified in the following way:shardingboolean is removedleaderfield is added as an optional string. When it is notnull, it has the same effect (and more) than havingsharding: truein the previous iteration of theNetworkobject. The leader is used as a check when receiving task creation requests.versionfield is added as a UUID, defaulting to the null UUID. The version is used when processing tasks.network.leaderis set, calling one of the following routes will fail withnot_a_leadererror if the target'snetwork.selfis not the same as itsnetwork.leader:POST /indexesPATCH/DELETE /indexes/{:indexUid}POST/PUT/DELETE /indexes/{:indexUid}/documentsPOST /indexes/{:indexUid}/documents/deletePOST /indexes/{:indexUid}/documents/delete-batchPOST /indexes/{:indexUid}/documents/editPATCH/DELETE /indexes/{:indexUid}/settingsand settings sub-routesPATCH /networkif the target is the new leaderPOST /swap-indexesleaderis set,PATCH /networkno longer returns aNetworkobject. Rather, it spawns a newNetworkTopologyChangetask, and returns the summarized task view.POST /indexes(new to this PR)PATCH/DELETE /indexes/{:indexUid}(new to this PR)POST/PUT/DELETE /indexes/{:indexUid}/documents(was already the case before this PR)POST /indexes/{:indexUid}/documents/delete(was already the case before this PR)POST /indexes/{:indexUid}/documents/delete-batch(was already the case before this PR)POST /indexes/{:indexUid}/documents/edit(was already the case before this PR)PATCH/DELETE /indexes/{:indexUid}/settingsand settings sub-routes (new to this PR)PATCH /networkif the target is the new leader (new to this PR)POST /swap-indexes(new to this PR)NetworkTopologyChangetasks that perform the following:network.versionlower than the network task's versionnetworkroute with specific headers containing the expected metadataselfandleaderfrom the networkby @dureuill in #6000
🛠️ Maintenance
Asset availability note
🌈 The Meilisearch binary is available again for
meilisearch-enterprise-macos-amd64andmeilisearch-macos-amd64. It was not available for Meilisearch v1.29.Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.29.0...v1.30.0
v1.29.0: 🐑Compare Source
Build compatibility note
The git binary must now be present at build time to populate the
commitSha1field of the/versionfield.This change was made for build performance reasons.
by @dureuill in #6030
🌈 Improvements
Another piece of the settings indexer is available: searchable and exact attributes
The new settings indexer scales better, supports near-instant cancellations and displays the progress of the indexing operation.
Previously, the new settings indexer was enabled only if the only changes in a settings batch were to embedder settings. In Meilisearch v1.29.0, the new settings indexer will be enabled if the change is any combination of:
searchableAttributesexactAttributesproximityPrecisionembedders(as before)Any other change to settings appearing in a batch will cause the batch to use the legacy settings indexer.
Additionally, the new settings indexer is currently disabled by default for Cloud users.
OSS users who would like to disable the new settings indexer should pass the
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGSenvironment variable totrue.by @Kerollmops in #5983
Enable the new vector store by default for new indexes
Meilisearch v1.21.0 introduced a new vector store backend providing better performance and relevancy.
Starting with v1.29.0, any newly created index will default to the new backend.
Existing indexes will be left unchanged.
It is still possible to explicitly choose the vector store backend, please refer to the relevant experimental feature discussion page.
by @Kerollmops in #6004
Support more models for
huggingFaceembedderYou can now select models with the XLM Roberta architecture when generating embeddings locally on CPU or GPU with the
huggingFaceembedder.by @qdequele in #6018
🦋 Bug fixes
🔧 Maintenance and Misc.
Last week was a Quality of Life week, and while we still had improvements in the pipe, the bulk of our work was dedicated to maintenance tasks.
Most notably, the CI is now faster, going from over one hour to less than 30 minutes, and also more reliable as it automatically tests the dumpless upgrade.
xtasksub-command to generate prototype tag names with the expected nomenclature by @Kerollmops in #6022Asset availability note
⚠️ The Meilisearch binary is not available for
meilisearch-enterprise-macos-amd64andmeilisearch-macos-amd64due to a compilation oversight. #6037 aims at fixing this for future releases.The more recent
meilisearch-enterprise-macos-apple-siliconandmeilisearch-macos-apple-siliconare fine.Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.28.2...v1.29.0
v1.28.2: 🐩Compare Source
This release fixes a bug affecting the Prometheus metrics route in versions 1.28.0 and 1.28.1, specifically when the instance has too many tasks. The issue is visible as high memory usage and could cause the instance to be OOM-killed. If you are using the /metrics route, we recommend deleting all succeeded or failed tasks in the index using the dedicated route or upgrading to at least v1.28.2.
🐛 Bug fixes
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.28.1...v1.28.2
v1.28.1: 🐩Compare Source
This release features two fixes: one to ensure that we correctly upload the Linux-amd64 binaries for the Community and Enterprise editions, and one contributed by an external developer to ensure that we still return documents that don't contain the sortable attribute after those that do.
🐛 Bug Fixes
🫂 New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.28.0...v1.28.1
v1.28.0: 🐩Compare Source
This release introduces improvements to language support and separates the community and enterprise binary editions. We now offer binaries under the BUSL-1.1 license, identified by the "enterprise" term in their names, in addition to our MIT-licensed binaries, which retain their original names. Docker images for the enterprise edition are available in the
getmeili/meilisearch-enterpriserepository.📝 Licensing
✨ Enhancement
🔩 Miscellaneous
🫂 New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.27.0...v1.28.0
v1.27.0: 🦮Compare Source
This release improves the batch size for better performance. It also fixes bugs with the embedders that could skip some documents during generation and resolves an issue with the document route that displayed the same documents on multiple pages. It improves the quality of error messages when uploading snapshots to S3, which helps with debugging.
⚙️ Compatibility support
Meilisearch MacOS binaries now generated with MacOS Sonoma (
macos-14)✨ Enhancement
🪲 Bug fixes
available_parallelismth document in a batch was ignored for the purpose of embedding when using a Hugging Face embedder #5976multimodalexp. featureNOT _vectors EXISTSto find documents without vectors./documents/fetchbug that could cause duplicated search results when paginating sorted documents by @ManyTheFish in #5999Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.26.0...v1.27.0
v1.26.0: 🐛Compare Source
✨ Enhancements
Allow to attach custom metadata in the document addition or update tasks
customMetadataquery parameter to any supported route:GET /tasksfor tasks with metadata:by @dureuill in #5963
Support more models for
huggingFaceembedderYou can now select models with the
modernBERTarchitecture when generating embeddings locally on CPU or GPU with thehuggingFaceembedder.This unlocks for instance Ruri v3 and other models
by @hayatosc in #5980
🧪 Experimental: embedder failure modes
You can now decide to ignore some embedder-related errors. Either:
userProvidedembedders)When errors are ignored, the corresponding documents will not have embeddings, but the associated batch of tasks will not be marked as failed.
Of course, ignoring errors means that it is harder to notice an issue with embedders, so use this feature parsimoniously.
To enable the feature:
MEILI_EXPERIMENTAL_CONFIG_EMBEDDER_FAILURE_MODESand set it to a comma-separated list of errors to ignore, with the possible values:ignore_document_template_failuresto ignore document template failuresignore_embedder_failuresto ignore embedder failuresignore_document_template_failures,ignore_embedder_failuresignores both kinds of failuresby @dureuill in #5984
🧪 Experimental: timeout control for REST embedders
You can now control the duration before a REST embedder request times out.
MEILI_EXPERIMENTAL_REST_EMBEDDER_TIMEOUT_SECONDS, which must be a positive integer.by @dureuill in #5984
🔩 Misc
allocator-api2by @xuhongxu96 in #5969👥 Contributors
Many thanks to our new contributors @hayatosc and @xuhongxu96 ❤️
v1.25.0: 🐈⬛Compare Source
✨ Enhancement
🔬 [Experimental]: Search personalization by @ManyTheFish in #5775
Add the ability to dynamically rerank the search results based on Cohere using a personalized prompt.
For more information on how to set it up, see the dedicated experimental feature discussion.
🔬 [Experimental]: Upload snapshot tarballs to S3 by @Kerollmops in #5948
Add the ability to upload snapshots directly to S3. It has many advantages, such as being able to stream the entire process and effectively utilizing multipart technology to send chunks of data in parallel.
For more information on how to use it, see the dedicated experimental feature discussion.
🪲 Bug fixes
⚠️ [Breaking - Security] Redact Authorization header in webhooks by @dureuill in #5968
The value of the
Authorizationheader is now redacted when getting webhook, getting webhooks, or in the object returned when posting a new webhook or deleting a webhook.Authorizationheader back after it has been redacted🚰 Fix the LMDB fork memory leak by @Kerollmops in #5967
This bug was causing crashes in the recent indexer optimizations. If you deactivated these optimizations by setting the following environment variables:
You can now safely reactivate them without experiencing memory leaks.
🇩🇪 Hotfix German word segmentation by @ManyTheFish in meilisearch/charabia#360
German word segmentation relies on a word dictionary to segment words, but if a word is not part of the dictionary, it is cut into bigrams. The segmenter will now skip segmenting unknown words:
🇨🇳 Prevent splitting of numbers and English words in Chinese text segmentation by @JinheLin in meilisearch/charabia#354
It’s very common for Chinese, numbers, and English to appear together in the same sentence.
We now ensure that numbers and English are not segmented differently between segmenters:
🔩 Miscellaneous
Thanks to @JinheLin, @dureuill, @Kerollmops, and @ManyTheFish for their contribution! 🎉
v1.24.0: 🦞Compare Source
This release features some improvements with the interaction of the vector store and the
searchCutoffMswhen using the"vectorStore": "experimental"index setting. It also introduces the metadata headerMeili-Include-Metadataon the search request that adds a metadata field to the response. These metadatas contains one uid by query and a reminder of theindexUidand its primary key. We also introduced minor bug fixes around the compaction to improve the interaction with task cancellation.✨ Enhancement
🔩 Miscellaneous
👥 New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.23.0...v1.24.0
v1.23.0: 🐘Compare Source
This release introduces a new compact route on the index routes, which appends a new compaction task to the queue. Meilisearch uses an LMDB environment by index, and indexes start to fragment after some time. We have noticed that the indexes generally have 30% fragmentation. By defragmenting the environment, we've seen large (2-4x) speed-ups in terms of search and indexation. This is primarily due to the reordering of the LMDB internal pages and the removal of scattered free pages throughout the file, thereby relocating the content to the beginning.
We also worked on parallelizing the post-processing of facets. We noticed that a lot of time was spent iterating over the prefixes of the index in a single-threaded loop. We redesigned this part of the indexation to make it multi-threaded. We have seen a 4x and 6x improvement in terms of time spent on this operation.
✨ Improvements
🦋 Bug Fixes
🔩 Miscellenaous
New Contributors
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.22.1...v1.23.0
v1.22.3: 🐦🔥Compare Source
This version contains a minor fix that affects remote federated search users. If you are not a remote federated search user, it is not necessary to migrate from v1.22.x.
🦋 Bugfixes
MEILI_EXPERIMENTAL_REMOTE_SEARCH_TIMEOUT_SECONDSto a positive integer value. Please note that no CLI flag or configuration entry is available. By @dureuill in #5932v1.22.2: 🐦🔥Compare Source
🦋 Bugfixes
v1.22.1Compare Source
🐛 Bug Fixes
❤️ Huge thanks to our contributors: @dureuill and @irevoire.
v1.22.0: 🐦🔥Compare Source
🚀 Enhancements
_geojsonfield filterable_geojsonfield filled with a valid geojson_geoPolygonfilter, or the old_geoBoudingBoxand_geoPointsfilter🐛 Bug Fixes
❤️ Huge thanks to our contributors: @nnethercott, @Kerollmops, @ManyTheFish, @dureuill and @irevoire.
Full Changelog: https://github.com/meilisearch/meilisearch/compare/v1.21.0...v1.22.0
v1.21.0: 🐷Compare Source
🚀 Enhancements
vectorStoreSettingexperimental featurevectorSettingindex setting to"experimental"for the indexes where you want to try the new vector store🐛 Bug Fixes
decoding errorwhen upgrading with arestembedder (#5886) @dureuill.❤️ Huge thanks to our contributors: @ja7ad, @agourlay, @Kerollmops, @ManyTheFish, @dureuill and @irevoire.
v1.20.0: 🦟Compare Source
🚀 Enhancements
🐛 Bug Fixes
🔒 Security
⚙️ Maintenance/misc
❤️ Huge thanks to our contributors: @ManyTheFish, @arithmeticmean, @curquiza, @dureuill, @irevoire, @shreeup and dependabot[bot].
v1.19.1: 🪸Compare Source
🐛 Performance improvements
Enhance hybrid search with filter performances
In previous versions of Meilisearch, mixing hybrid search with filters, as shown below, could multiply the search time by hundreds.
Meilisearch will now directly compute the semantic distance with the filtered candidates if only a few candidates come from the filter, instead of searching for the closest embeddings matching the filter in the vector database.
v1.19.0: 🪸Compare Source
🚀 Enhancements
Automatically shard documents to scale horizontally
Meilisearch can now automatically distribute documents between multiple instances using the new sharding feature.
Find a guide on implementing sharding in the documentation.
Added in #5784 by @dureuill
🐛 Bug Fixes
❤️ Huge thanks to our contributors: @Kerollmops, @dureuill and @martin-g.
v1.18.0: 🕷️Compare Source
🚀 Enhancements
queryVectorin the search response when usingretrieveVectors(#5778) @Mubelotix❤️ Huge thanks to our contributors: @Kerollmops, @Mubelotix, @irevoire and @qdequele.
v1.17.1: 🐀Compare Source
🚀 Enhancements
⚙️ Maintenance/misc
v1.17.0: 🐀Compare Source
Enhancements
Check the in progress documentation (PR merged soon)
STARTS_WITHfilter by @Mubelotix in #5783No need to activate the experimental feature anymore to use this operator 🎉
Bugs
PATCHby @Mubelotix in #5807⚠️ This fix leads to a breaking change on:
PUT→PATCH. Integrations and SDKs will adapt to this change.snapshotCreationtask being included in snapshot by @Mubelotix in #5773Maintenance
v1.16.0: 🦚Compare Source
Meilisearch v1.16 introduces two main features: multimodal embeddings and a new
/exportroute. Multimodal embeddings use AI-powered search to index images in addition to textual documents. The/exportroute simplifies migrating from a local Meilisearch instance to Meilisearch Cloud.🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment happens between 4 to 48 hours after a new version becomes available.
Some SDKs might not include all new features. Consult the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).
New features and updates 🔥
Experimental feature: Multimodal embeddings
v1.16 allows indexing and searching non-textual documents, as well as performing searches with image queries. This new feature uses multimodal embedders to provide a common semantic representation for images, texts, and any other piece of data.
Usage
First, enable the
multimodalexperimental feature:Next, pick an embedder provider that supports multimodal embeddings such as Cohere or VoyageAI to start building the embedding configuration.
The following is an example configuration for multimodal embedder using VoyageAI:
The configuration above sets up Meilisearch to generate vectors for two fields:
textandposter. It also allows users to perform searches with an image URL, a raw image, or regular text.Use the new
mediasearch parameter together with one of thesearchFragmentsyou specified in your embedder to search with an image:You can also perform a text search with
qandhybrid:Meilisearch performs searches all fields with embeddings when parsing
hybridqueries targeting indexes with multimodal embedders.For more information about this feature, please refer to its public usage page
Done by @dureuill in #5596
The new
/exportroutev1.16 introduces a new
/exportroute that allows transferring documents between instances without having to create a dump or a snapshot. This feature is particularly useful when migrating from a local machine to Meilisearch Cloud.Usage
To transfer data between instances, query
/exportand point itsurlparameter to the URL of the target instance:This will generate an export and task start migrating data between instances. Depending on the target instance, you may also have to supply an API key with full admin permissions in the
apiKeyparameter. Consult the documentation for an exhaustive list of accepted parameters.If the request fails, Meilisearch will retry a few times before setting its status to failed. You may also cancel an export task manually. In this case, Meilisearch will interrupt the task locally, but not in the target instance.
Done by @kerollmops with the help of @mubelotix in #5670
Other improvements
attributes_to_search_onby @lblack00 in #5548Fixes 🐞
base_urlwhen used with OpenAI clients by @diksipav in #5692--experimental-limit-batched-tasks-total-sizeby @Kerollmops in #5705disableOnNumbersnot being affected by typo tolerance settings resets by @Nymuxyzo in #5702{}in index chat settings would incorrectly set the limit to 20 instead of resetting to empty defaultsMisc
GITHUB_TOKENsecret for thedb change checkworkflow by @martin-g in #5632❤️ Thanks again to our external contributors:
v1.15.2: 🦘Compare Source
This patch release introduces a major fix and some minor fixes.
Major fix: searchable attributes database bug
Some searchable fields were removed from the searchable databases when they were removed from the
filterableAttributessetting.This made them unsearchable, although they were still precise in the
searchableAttributessetting.Fixed by @ManyTheFish in #5660
Minor fixes
v1.15.1: 🦘Compare Source
Meilisearch v1.15.1 adds new experimental conversational features and enables LLM-driven chat features.
🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment takes 4 to 48 hours after a new version becomes available.
Some SDKs might not include all new features. Please look over the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).
Chat with your indexes
After enabling the experimental chat feature, you can create a chat workspace with the appropriate settings.
We have a guide on how to set up a good chat interface for your indexes.
Then by using the official OpenAI SDK you'll be able to chat with your indexes.
Done by @Kerollmops in #5556.
v1.15.0: 🦘Compare Source
Meilisearch v1.15 adds a new typo tolerance setting, allowing you to disable typo tolerance for numbers. It also enables comparison operators for string filters.
🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment takes 4 to 48 hours after a new version becomes available.
Some SDKs might not include all new features. Please look over the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).
New features and updates 🔥
Disable typo tolerance for numbers
Set
typoTolerance.disableOnNumberstotrueto disable typo tolerance for numbers:Deactivating the typo tolerance on numbers can be helpful when trying to reduce false positives, such as a query term
2024returning results that include2025and2004. It may also improve indexing performance.Done by @ManyTheFish in #5494.
Lexicographic string filters
This release allows you to filter strings lexicographically by enabling comparison operators (<, <=, >, >=, TO) on string values:
This new feature can be particularly useful when filtering human-readable dates.
Done by @dureuill in #5535.
Other improvements
batchStrategyfield in the batches stats by @dureuill in #5488, #5530, and #5588/networkURL validation error message format by @CodeMan62 in #5486Fixes 🐞
_matchesPositionlength calculation to improve client-side cropping by @shaokeyibb in #5446_georanking rule by @HDT3213 in #5487MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKSto 0 results in Meilisearch never processing any kind of task. By @irevoire in #55650formaxTotalHitsin the index settings by @irevoire in #5566documentTemplates that use array filters on documents (e.g.join) by @dureuill in #5593Misc
❤️ Thanks again to our external contributors:
v1.14.0: 🦫Compare Source
Meilisearch v1.14 gives more granular control over which parts of filters you can disable for indexing performance optimization. This release also includes composite embedders, which can improve embedding generation during search and indexing, and a new route to retrieve multiple documents by their IDs.
🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment happens between 4 to 48 hours after a new version becomes available.
Some SDKs might not include all new features. Consult the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).
New features and updates 🔥
Granular filterable attribute settings
v1.14 gives you more control over which types of filter you want to disable in your searches. This allows you to further optimize indexing speeds by letting you activate only the filter features you need.
Use
PATCH /indexes/INDEX_NAME/settingsto specify which filters you want to enable for each attribute in your documents:For more details about this feature, please refer to the dedicated documentation page.
Done by @ManyTheFish in #5254.
Composite embedders
This feature allows using different embedders at search and indexing time. This can be useful when optimizing AI-powered search performance. For example, you may prefer to use:
To use the feature, follow these steps:
Composite embeddersfeature with the Meilisearch Cloud interface, or with the/experimental-featuresroute:sourceto"composite"and defining onesearchEmbedderand oneindexingEmbedder:indexingEmbedderduring indexing andsearchEmbedderwhen responding to user queriesFor more details about this feature, please refer to its public usage page.
Done by @dureuill in #5371 and #5401.
Retrieve multiple documents by ID
It is now possible to retrieve multiple documents by their IDs:
Done by @dureuill in #5384.
Other improvements
/documentsrequests using eitherPUTorPOSTby @Kerollmops in #5293/batchesroute by @Kerollmops in #5356 and #5364exhaustiveFacetCountparameter to/facet-searchroute to retrieve an exhaustive facet count by @ManyTheFish in #5369Fixes
disabledOnAttributessettings by @ManyTheFish in #5415 (fixes #5347 and #5452)rankingScoreThresholdno longer causes_rankingScoreto be miscalculated by @barloes and @dureuill in #5313_vectorsby @dureuill in #5478Misc
❤️ Thanks again to our external contributors:
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.