New Features
Federated search
Use the newfederation setting of the /multi-search route to return a single search result object combining results from multiple indexes:
federationOptions in each query:
weight parameter controls how likely results from each index appear in the final results. Values less than 1.0 make results less likely to appear, while values greater than 1.0 make them more likely. Default is 1.0.
Language settings
Explicitly define which languages are used in your documents for better search accuracy, particularly helpful for datasets with multiple languages or those that previously required workarounds. Set languages during indexing withlocalizedAttributes:
epo, eng, rus, cmn, spa, por, ita, ben, fra, deu, ukr, kat, ara, hin, jpn, heb, yid, pol, amh, jav, kor, nob, dan, swe, fin, tur, nld, hun, ces, ell, bul, bel, mar, kan, ron, slv, hrv, srp, mkd, lit, lav, est, tam, vie, urd, tha, guj, uzb, pan, aze, ind, tel, pes, mal, ori, mya, nep, sin, khm, tuk, aka, zul, sna, afr, lat, slk, cat, tgl, hye.
Set language at search time with the locales parameter:
Experimental: CONTAINS filter operator
Enable thecontainsFilter experimental feature to filter results containing partial string matches:
CONTAINS operator in filter expressions:
Experimental: Edit documents with a Rhai function
Update a subset of your documents using a function directly from Meilisearch without needing to fetch, modify, and reindex them. First, enable the experimental feature:/documents/edit route:
function parameter accepts Rhai code that can modify document fields. Use the filter parameter to target specific documents and context to pass data to your function.
Improvements
Search performance
Implemented intersection at the end of the search pipeline for faster search operations.Indexing performance
Stopped opening indexes just to check if they exist, reducing unnecessary overhead during indexing operations.AI-powered search enhancements
Several quality-of-life improvements for REST embedders and remote embedding services:- Add custom headers to REST embedders using the optional
headersparameter to include additional headers in requests to remote embedders - Add optional
urlparameter to OpenAI embedder to specify a custom embedding endpoint dimensionsparameter now available for Ollama embedders- Improved error messages when embeddings are missing or model configurations cannot be loaded
- Exponential backoff duration is now randomized when REST embedder requests fail
- OpenAI embeddings that exceed max tokens are now truncated rather than embedded by chunk
Error handling and messaging
- Improved tenant token error messages for better debugging
- Wrong HTTP status and confusing error messages on incorrect payloads have been fixed
- Errors at the main Meilisearch binary level are now logged with
ERRORlevel for better visibility
Improved documentation of natural language processing
Added null byte as hard context separator and included all math symbols in the default separator list for better text processing across languages.Heavy load handling
- Optimized search queue handling to spawn only one search queue in actix-web
- Improved index scheduler reliability to prevent stopping during heavy loads
- Explicitly drop search permits to free resources more efficiently
- Stop processing searches that take longer than one minute to prevent resource exhaustion
Document operations
Made autobatching of document deletions with document deletions by filter possible, unclogging the task queue for users performing these operations heavily.Search configuration
Added experimental CLI flags to fine-tune search behavior:--experimental-nb-searches-per-core: Configure how many searches Meilisearch can process concurrently per core--experimental-drop-search-after: Set how many seconds before Meilisearch considers a search irrelevant and drops it without processing
Other
Breaking changes
REST embedder configuration
The REST embedder configuration has been simplified and changed in v1.10: Old v1.9 format:request object represents the request sent to the remote embedder, with {{text}} as a placeholder for the text to embed. The response object represents the response structure, with {{embedding}} as a placeholder for the embedding vector.
If you have dumps with REST embedder configurations from v1.9, you must remove embedders with source "rest" before importing into v1.10. Attempting to import will result in an error about unknown fields.