New Features
Hybrid search updates
Meilisearch v1.9 introduces multiple enhancements to hybrid search functionality:- The
_vectorsfield now accepts object values in addition to embedding arrays, allowing you to specify embeddings with additional metadata:
embeddings field replaces a document’s embeddings, while regenerate controls whether embeddings are regenerated on future document updates. Set regenerate: true to import embeddings as a one-shot process, or regenerate: false to preserve embeddings through document updates.
- Use the new
retrieveVectorssearch parameter to include the_vectorsfield in search results (performance improvement makes this opt-in by default):
Ranking score threshold
Filter search results by minimum quality using therankingScoreThreshold parameter:
estimatedTotalHits or totalHits.
Get similar documents endpoint
Find documents similar to a given document using the new/indexes/{indexUid}/similar endpoint:
id: Document ID to find similar results for (required)offset: Number of results to skip (optional, defaults to0)limit: Number of results to return (optional, defaults to20)filter: Filter expression to apply to results (optional)embedder: Embedder to use for similarity matching (optional, defaults to"default")attributesToRetrieve: Fields to include in results (optional, defaults to all)showRankingScore: Include ranking scores (optional, defaults tofalse)showRankingScoreDetails: Include detailed ranking scores (optional, defaults tofalse)rankingScoreThreshold: Minimum ranking score threshold (optional)
GET (URL parameters) and POST (request body) routes.
frequency matching strategy
Prioritize results containing less frequent query terms using the new frequency matching strategy:
Set distinct attribute at search time
Specify the distinct attribute for a search without modifying index settings using thedistinct parameter:
distinct attribute takes precedence over the index settings.
Improvements
Indexing performance
Settings updates are now significantly faster with reduced disk usage. When changing embedding settings, only embedders with modified settings regenerate their embeddings. When only thedocumentTemplate is modified, embeddings regenerate only for documents where the modification affects the text to embed.
Search performance
- Filter AND operations are now faster during search
- Facet distribution calculations are optimized for improved performance
Language support
- Added new normalizer to normalize œ to oe and æ to ae
- Fixed
chinese-normalization-pinyinfeature flag compilation
Relevancy improvements
All fields now have the same impact on relevancy whensearchableAttributes: ["*"]. Fixed searchableAttributes behavior when handling nested fields.
Prometheus metrics (experimental)
Use HTTP path patterns instead of full paths in metrics for better grouping and analysis.Other
Breaking changes
- Empty
_vectors.embedderarrays are now interpreted as having no vector embedding (previously interpreted as a single embedding of dimension 0) - The
_vectorsfield is no longer included in search results by default when the experimentalvectorStorefeature is enabled (useretrieveVectors: trueto opt-in) - Meilisearch no longer preserves the exact representation of embeddings in
_vectors. Vectors are stored in a canonicalized float representation (e.g.,3may be represented as3.0)
Deprecations
TheexportPuffinReport experimental feature has been removed. Use logs routes and logs modes instead.
Bug fixes
- Fixed security issue in Rustls dependency
- Fixed embedding settings reset when changing the
sourceof an embedder, preventing misleading error messages - Fixed panic in hybrid search when removing all embedders
- Fixed hybrid search to respect
offsetandlimitparameters when returning keyword results early - Fixed issue where dumps with user-provided embedders and documents opting out of vectors would fail to import correctly (v1.9.1)