New Features
- New Features
- New Features
- Improvements
- New Features
- Improvements
- Other
- New Features
- Improvements
- Other
- New Features
- Improvements
- New Features
- Improvements
- Bug Fixes
- New Features
- Improvements
- Bug Fixes
- Breaking Changes
- New Features
- Breaking Changes
- Bug Fixes
- Improvements
- New Features
- Other
- New Features
- Improvements
- Other
- New Features
- Improvements
- Other
- Improvements
- Other
- New Features
- Improvements
- Other
- New Features
- Improvements
- Other
- New Features
- Improvements
- New Features
- Improvements
- New Features
- Improvements
- New Features
- Improvements
- New Features
- Improvements
- Other
- New Features
- Improvements
- Other
- New Features
v1.56
2026-10-26
New Features
Facet Distribution by Sampled Count
Introduce sampledCount as a new sorting option when retrieving facet distribution. This method provides a rough estimate of facet distribution with faster computation compared to the count method. Note that while the count of documents for each facet is exhaustive, the list of facets itself is not—some facets that would appear with the count method may be skipped.
Improvements
Adaptive Rate Limiting for Embedders
Meilisearch now implements an adaptive strategy for handling embedder load and outages:
- For small usage with few documents, Meilisearch accepts slower embedder services
- For large updates containing thousands of documents, Meilisearch gives up early to avoid prolonged delays
- Better outage handling: Meilisearch abandons indexing early if the embedder server is unavailable for too long
- Support for the
Retry-Afterheader (in seconds) to avoid unnecessary retries during brief service interruptions
General Search Performance Optimization
Overall search performance has been optimized for better responsiveness and efficiency.Find more information on GitHub
v1.55
2026-10-12
New Features
Preview the effect of a dynamic search rule
You can now apply an inline-specified dynamic search rule to a search query without saving it permanently. This lets you test how a rule would affect search results before deploying it.The POST /indexes/{:indexUid}/search and POST /multi-search endpoints now accept an optional inlineRule parameter in the search query object. When provided, Meilisearch will apply the rule’s actions to that specific search as if it had been saved.When you include the Meili-Include-Metadata: true header, the response’s metadata will show whether the inline rule’s conditions were satisfied and why (if not).Note: This feature requires Meilisearch Enterprise Edition and the dynamicSearchRules experimental feature.Example: Apply a user-specific rule to boost Batman movies
{
"q": "super hero",
"inlineRule": {
"uid": "user-likes-batman",
"actions": {
"scale": [
{
"filter": "hero = batman AND release_time = fresh",
"weight": 1.2
}
]
}
}
}
Example: Compare search results with and without a rule
{
"queries": [
{
"q": "fashion",
"filter": "color = blue AND category = shirt"
},
{
"q": "fashion",
"filter": "color = blue AND category = shirt",
"inlineRule": {
"uid": "special-sales",
"conditions": {
"query": {
"words": "pants"
},
"filter": {
"values": {
"color": "yellow",
"stock_intent": "destock"
}
}
}
}
}
]
}
Improvements
Better performance tracking for facet distribution
The performanceDetails in search responses now includes timing information for facet distribution computation. When you set showPerformanceDetails to true, you’ll see separate entries for:
compute facet distribution: Time spent computing facet countscompute facet stats: Time spent computing facet statisticsfacet distribution: Total time for all facet-related operations
This helps you identify whether facet computation is affecting your search performance.Example response with facet performance details
{
"performanceDetails": {
"process > execute local > facet distribution > compute facet distribution": "315.75µs",
"process > execute local > facet distribution > compute facet stats": "27.71µs",
"process > execute local > facet distribution": "432.62µs"
}
}
Other
Fixed ranking score threshold performance
Meilisearch now stops searching immediately after finding the first document below the rankingScoreThreshold, rather than continuing to evaluate additional documents. This significantly improves search performance when using this parameter.Note: This fix may change result ordering in some cases, as allowed by our compatibility policy.
Breaking change: Binary quantization cannot be disabled
If your embedder is configured with binary quantization, you can no longer disable it by passing binaryQuantization: null in an embedder settings update. Doing so now returns an error. Binary quantization is permanent for an index because the exact embedding values cannot be recovered after quantization.Find more information on GitHub
v1.54
2026-09-21
New Features
Scale actions for boosting, demoting, and hiding documents
Dynamic search rules now support a new scale action that lets you adjust document relevancy in search results:
- Boost documents: Set
weight > 1.0to increase relevancy scores (e.g.,weight: 4.0) - Demote documents: Set
weight < 1.0to decrease relevancy scores (e.g.,weight: 0.5) - Hide documents: Set
weight = 0.0to exclude documents from results (unless they’re also pinned)
Each scale action can target documents using:
filter: A Meilisearch filter expression to select documentsids: An explicit list of document IDsindexUid: The index this action applies to (optional; applies to any matching index if omitted)
Example: Boost all Batman products by a factor of 4.0:
{
"conditions": {
"time": {
"start": "2026-09-21T19:00:00Z",
"end": "2026-09-28T18:59:00Z"
}
},
"actions": {
"scale": [
{
"filter": "series = batman",
"weight": 4
}
]
}
}
Score details now include a scale object showing which rules were applied and their combined weight effect.Note: Scale operations have little measurable effect when the first ranking rule is not a relevancy rule.
MCP (Model Context Protocol) endpoint
A new /mcp endpoint implements the Model Context Protocol, allowing you to register Meilisearch with LLM applications like Claude Code. The endpoint uses HTTP+SSE transport and bearer authentication. Enable the mcpRoute experimental feature to use it.
Improved performance details in multi-search queries
Federated search results now provide detailed performance timing that separates metrics per query, making it easier to identify performance bottlenecks in multi-index searches.
Improvements
Enhanced ranking score details
- Pinned documents now show a
ruleUidfield in score details, indicating which dynamic search rule caused the pin - Scaled documents display a new
scalesection in score details showing: actions: Array of applied scale actions withruleUidandweighttotalWeight: The combined multiplicative factor from all applied scale actions
Score details expose ruleUid values to end users. Keep sensitive information in the rule’s description rather than in the uid.
New environment variables for scale operation limits
Control scale operation behavior with:
MEILI_EXPERIMENTAL_DSR_FUEL_MAX_SCALE_ACTIONS: Maximum applicable scale actions per search (range 1-255, default 10)MEILI_EXPERIMENTAL_DSR_FUEL_SCALE_FUEL: Maximum scale constraint combinations evaluated per search (range 1-255, default 10)
Other
Breaking changes to dynamic search rules API
The dynamicSearchRules experimental feature has breaking API changes:1. POST /dynamic-search-rules response structureThe actions field is now an object with two properties instead of a list:
{
"pin": [
{
"id": "document-id",
"position": 0,
"indexUid": null
}
],
"scale": [
{
"weight": 2,
"ids": [
"doc1",
"doc2"
],
"filter": "available = true",
"indexUid": null
}
]
}
2. PATCH /dynamic-search-rules/ changesThe endpoint now expects rules with the updated actions object structure (see above).3. Reserved rule UIDThe uid __meilisearch_metadata is now reserved and cannot be used as a ruleUid.Migration: Cloud users will have rules migrated automatically, and the UI will adapt to the new API. Self-hosted users upgrading with --upgrade-db will have rules migrated automatically.Find more information on GitHub
v1.53
2026-08-10
New Features
Index size metricsTwo new metrics are now available in the GET /indexes/{index_uid}/stats and GET /stats endpoints:
indexSize: the total size of the index on diskusedIndexSize: the portion of that size actively used by data
These metrics help you monitor storage usage per index and across your whole Meilisearch instance.
Improvements
Sharding support for foreign filtersForeign filters now support sharding. Document retrieval during filter evaluation is performed through the network layer, allowing foreign filters to work correctly in sharded setups. In addition, the maximum number of documents a foreign filter can retrieve has been increased from 100 to 1000.Find more information on GitHub
v1.52
2026-08-03
New Features
SSE streaming routes for tasks and batches (experimental)Two new Server-Sent Events (SSE) routes allow you to subscribe to live updates instead of polling:
GET /tasks/stream: streams task status updates in real timeGET /batches/stream: streams batch status updates in real time
These routes are experimental. Enable them with the tasksStreamingRoute experimental feature flag before use.
Improvements
Faster document retrievalDocument formatting has been optimized from O(n) to O(1) complexity, delivering significant speed improvements when retrieving large numbers of documents (more than 20 items).
Bug Fixes
- Fixed duplicate pins appearing in federated search results
- Fixed unnecessary settings updates when configuration remains unchanged
Find more information on GitHub
v1.51
2026-07-27
New Features
Filter conditions for Dynamic Search RulesDynamic Search Rules now support a filter condition. A rule activates when the search filter matches at least one branch of the condition, giving you finer control over when rules apply.New lastUpdatedAt field for Dynamic Search RulesDSR listings now include a lastUpdatedAt field automatically populated with the timestamp of the last modification task. Listings are also sorted by lastUpdatedAt in descending order (most recently modified first).
Improvements
Faster search on large datasetsDisk reads have been reduced to a single operation across the entire search pipeline, yielding up to 5.4x performance improvements on datasets with many distinct fields.Dumpless upgrade stabilizedThe --experimental-dumpless-upgrade flag is now stable and has been renamed --upgrade-db. Functionality is unchanged.
Bug Fixes
- Restored legacy shorthand filterable attributes syntax support
Breaking Changes
- Removed
--experimental-replication-parameters,--experimental-no-edition-2024-for-dumps, and--experimental-no-snapshot-compactionflags
Find more information on GitHub
v1.50
2026-07-20
New Features
Scalable Dynamic Search RulesThe Dynamic Search Rules API has been revamped to scale to 75,000 rules without impacting search performance. Key changes include:
- New
DELETE /dynamic-search-rulesroute to delete all rules at once priorityfield renamed toprecedenceconditionsrestructured with separatequeryandtimecondition objects- A DSR Fuel system with configurable limits via environment variables
Federated document fetching in sharded configurationsDocument retrieval routes now fetch from all shards by default in network configurations. Use the new useNetwork: false parameter to limit retrieval to the local instance.Facet wildcard supportThe facets search parameter now accepts wildcard patterns (for example, dogs.*) to match multiple facet fields at once.
Breaking Changes
PATCHandDELETE /dynamic-search-rules/{uid}now return tasks instead of immediate responsesDELETE /dynamic-search-rules/{uid}no longer returns 404 for non-existent rules- The
POST /dynamic-search-rulesfilter parameter usesqueryinstead ofattributePatterns
Bug Fixes
- Fixed migration failures when upgrading from v1.48 with empty synonyms
- Fixed quadratic memory consumption in filter processing
- Fixed escaped character handling in filter expressions
- Improved fault tolerance for AWS S3 multipart snapshot uploads
Find more information on GitHub
v1.49
2026-07-06
Improvements
Faster synonym searchMeilisearch now loads synonyms lazily, only when a query word actually matches a synonym. Previously, all synonyms were loaded for every search request regardless of relevance, which caused noticeable slowdowns for instances with large synonym lists. Depending on your synonym count, this can deliver performance improvements of up to 13x.Find more information on GitHub
v1.48
2026-06-22
New Features
Render template route (experimental)A new POST /render-template route lets you test document templates and fragments before and after configuring an embedder. This is useful for validating template syntax and seeing how your documents will be rendered.Before using this route, enable the renderRoute experimental feature:
PATCH /experimental-features
{
"renderRoute": true
}
The route accepts a template and optional input, and returns both the unrendered template and the rendered result:
POST /render-template
{
"template": {
"kind": "documentTemplate",
"indexUid": "movies",
"embedder": "myMoviesEmbedder"
},
"input": {
"kind": "indexDocument",
"indexUid": "movies",
"id": "2"
}
}
Response:
{
"template": "A movie titled {{doc.title}} whose description starts with {{doc.overview|truncatewords:10}}",
"rendered": "A movie titled Ariel whose description starts with Taisto Kasurinen is a Finnish coal miner whose father has..."
}
You can render templates from embedders, chat settings, or inline templates. You can also provide input from index documents, inline documents, or search queries. If input is null, the route returns just the template without rendering it.
Other
Foreign filters restricted to retrieval routesForeign filters are now only supported on retrieval routes (search, get document, etc.). They are no longer accepted on routes that write or modify documents. The following routes no longer support foreign filters:
- Edit documents by function:
POST /indexes/{index_uid}/documents/edit - Delete documents by filter:
POST /indexes/{index_uid}/documents/delete - Export to a remote Meilisearch:
POST /export
Documents fetch queue feature invertedThe queueDocumentsFetch experimental feature has been replaced with disableDocumentsFetchQueue. This changes the behavior from opt-in to opt-out. The documents fetch queue is now enabled by default and you must explicitly disable it if needed.Bug fixes
- Remote federated search no longer returns duplicate documents from different instances.
- S3 snapshot uploads no longer fail due to a race condition in internal buffer recycling.
Find more information on GitHub
v1.47
2026-06-15
New Features
Search personalization on federated searchYou can now use search personalization in federated search requests. As with page/hitsPerPage and limit/offset, the personalization option must be set inside the federation object. If you place it on an individual query instead, Meilisearch returns an error reminding you to move it into federation.
Improvements
The new settings indexer is now feature completeThe new settings indexer now handles tokenizer-related settings, including locales, dictionary, synonyms, stop words, separator tokens, and non-separator tokens. With this addition, all settings tasks are handled by the new indexer unless you set MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS=true. This brings better scaling behavior, much faster task cancellation, and a more precise progress view when updating settings.More observability metricsMeilisearch now exposes additional Prometheus metrics, including document throughput, making it easier to monitor indexing performance and debug your instance.
Other
Search pipeline refactorThe search pipeline has been refactored so that all search requests run through a unified federated search implementation under the hood. This introduces a small breaking change: some error messages have been updated and a few error codes have changed (for example, in certain cases MultiSearchError may now be returned where SearchError was previously returned, and vice versa). If your application inspects error codes, review your error handling when upgrading.Bug fixes
- Placing
attributeRankorwordPositionbeforewordsinrankingRulesno longer removes hits from the response. searchCutoffMsis no longer ignored under certain conditions when embedding documents.- Remote federated search and
useNetwork: truerequests no longer fail when a filter contains a single quote (').
Find more information on GitHub
v1.46
2026-06-08
New Features
Queue document fetch routes (experimental)A new experimental feature, queueDocumentsFetch, makes the GET /indexes/:uid/documents and POST /indexes/:uid/documents/fetch routes wait in the search queue when no thread is available to process them, improving stability under heavy load.
Improvements
Expanded new settings indexer supportThe new settings indexer now handles more parameters, so changing them no longer requires a full re-indexing:
- Exact words and disable-on-words
- Exact and disable settings on numbers
- Prefix search settings (prefix computation)
This makes the engine more efficient when updating these settings.
Other
Fixed deletion batching regressionFixed a regression introduced in v1.45.0 affecting the auto-batching of deletion by filter together with document additions and updates. This operation is now batched correctly.Fixed S3 multipart upload part sizeMeilisearch now respects the configured multipart part size when uploading snapshots to S3, never creating a part larger than the defined size (except for the last part).Fixed panic on incomplete filtersAn incomplete filter now returns an error instead of causing an internal panic.Find more information on GitHub
v1.45
2026-05-26
Improvements
Faster settings indexing performanceMeilisearch now handles more settings through the optimized settings indexer, significantly improving performance when changing settings. The following settings are now directly handled by the new indexer without requiring a full re-indexing:
- Displayed fields
- Synonyms
- Primary key
- Typo tolerance settings (authorize typos, min word length for one and two typos)
- Facet settings (max values per facet, sort facet values by)
- Pagination max total hits
- Search cutoff
- Chat settings
- Foreign keys
- Global facet search
If you encounter any issues with the new settings indexer, you can disable it by setting the environment variable MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS=true or using the equivalent CLI parameter.Improved document fetch performanceDocument fetching no longer blocks Actix worker threads, resulting in better overall system responsiveness when retrieving documents.Optimized deletion batchingMeilisearch now more efficiently batches filter-based deletions when mixed with document additions, improving indexing performance for this operation pattern. However, deleting documents by ID remains the recommended approach for optimal performance.
Other
Fixed binary quantization configuration corruptionResolved an issue where changing the binary quantization setting in embedder configurations would corrupt the database, preventing future changes to the quantization. If your database was affected by this issue, you may need to recreate the binary-quantized embedder from scratch.Find more information on GitHub
v1.44
2026-05-18
New Features
Remote federated facet search
Facet search now supports searching across all shards in a network. When using the network experimental feature with a leader defined, facet search calls to POST /indexes/{indexUid}/facet-search now default to remote federated search, fetching and merging results from all shards.You can control this behavior explicitly using the new useNetwork parameter in the facet search request body.
Human-formatted database sizes and detailed internal database breakdown
The stats endpoints now support two new query parameters to give you better visibility into your index storage:
showInternalDatabaseSizes: When set totrue, index stats include aninternalDatabaseSizesobject showing the size of each internal database componentsizeFormat: Set tohumanto get human-readable sizes (MiB, GiB, etc.) instead of bytes
Example with both parameters:
curl -X GET "http://localhost:7700/indexes/movies/stats?showInternalDatabaseSizes=true&sizeFormat=human"
{
"numberOfDocuments": 31944,
"rawDocumentDbSize": "19.64 MiB",
"avgDocumentSize": "636 B",
"isIndexing": false,
"internalDatabaseSizes": {
"wordPairProximityDocids": "96.16 MiB",
"documents": "19.64 MiB",
"wordPositionDocids": "17.83 MiB",
"wordFidDocids": "10.22 MiB",
"wordPrefixPositionDocids": "9.78 MiB",
"wordDocids": "9.02 MiB",
"wordPrefixFidDocids": "4.39 MiB",
"wordPrefixDocids": "3.27 MiB",
"main": "1.36 MiB",
"externalDocumentsIds": "976 KiB",
"fieldIdWordCountDocids": "240 KiB",
"exactWordPrefixDocids": "16 KiB",
"celluliteMetadata": "16 KiB"
},
"fieldDistribution": {
"genres": 31944,
"id": 31944,
"overview": 31944,
"poster": 31944,
"release_date": 31944,
"title": 31944
}
}
The same parameters work with GET /stats for global statistics.
Improvements
Reduced memory usage during indexing
Indexing memory consumption has been reduced through optimizations in prefix computation and by avoiding unnecessary deserialization. If you still experience high memory usage during post-processing, enable the --experimental-reduce-indexing-memory-usage option.
Improved GeoJSON indexing performance
GeoJSON indexing is now faster and more efficient. The optimization avoids reprocessing documents already indexed in dense cells, handling only newly added documents incrementally as they descend through the spatial cell tree.
Network settings propagation
Settings changes made through individual settings subroutes are now correctly propagated to other remotes in your network.
Improved Mistral provider compatibility
Fixed an issue where the chat route could fail when using Mistral as a provider.
Other
Breaking changes
Remote federated facet search is now the default: When using the network experimental feature with sharding enabled (leader is not null), POST /indexes/{indexUid}/facet-search calls now default to remote federated search instead of local-only search. The behavior can be controlled via the new useNetwork parameter.Embedder timeout now tied to search cutoff: The timeout for calling an external REST embedder at search time is now based on the searchCutOffMs setting in the index, rather than using a fixed timeout. If you observe missing semantic results or HTTP 500 errors for pure semantic search after upgrading, increase the value of searchCutOffMs in your index settings.Find more information on GitHub
v1.43
2026-05-04
New Features
New settings indexer
The new settings indexer provides more efficient handling of index settings modifications. It now supports filterable, sortable, facet search, and custom (asc/desc) attributes in addition to the previously-supported searchable, exact, proximity precision, and embedders.
- For Meilisearch Cloud users, the new settings indexer is disabled by default and can be enabled on a case-by-case basis for scaling purposes.
- For OSS users, the new settings indexer can be disabled by setting the
MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGSenvironment variable totrue.
Improvements
Improve facet search indexing performance
Facet search indexing is now faster. The internal data structure generation previously performed multiple full scans on internal entries; it now scans only specific entries dedicated to facet searchable fields.
Improve task queue compaction integration
The GET /health route now returns HTTP 500 after a successful task queue compaction to signal that Meilisearch should be restarted so that tasks can be enqueued again. For Meilisearch Cloud users, this ensures that compacting the task queue will automatically restart the instance after the compaction.
Other
Fixed lexicographic filters on strings
Fixed a bug where string facet values used in <, <=, >, >=, and IN filters were not normalized before comparison to facet values. This caused some values in documents (for example, 2026-01-01T00:00:00) to appear to have different ordering than expected due to normalization differences (becoming 2026-01-01t00:00:00).
Fixed typo tolerance regression
Fixed the WordDelta::added_or_deleted_words function that was causing typo tolerance issues introduced in v1.41.
Security fix in v1.43.1
v1.43.1 contains a fix for an authenticated SSRF vulnerability. Self-hosting users are recommended to upgrade if they allow third parties to configure Meilisearch instances. Meilisearch Cloud users are not required to update.Find more information on GitHub
v1.42
2026-04-13
New Features
Remote Availability Status for Query Fallback
The engine now tracks the availability status of remote instances in sharding and replication environments. Each remote is assigned a status (available or unavailable), allowing the engine to automatically avoid unavailable machines and resume querying them once they’re back online.The /network route now exposes remote statuses:
{
"remotes": {
"prod2": {
"url": "http://localhost:7702",
"searchApiKey": "mykey",
"writeApiKey": "mykey",
"status": "available"
},
"prod3": {
"url": "http://localhost:7703",
"searchApiKey": "mykey",
"writeApiKey": "mykey",
"status": "unavailable"
}
}
}
Document Join Filtering (Experimental)
Filter documents based on attributes in related indexes using the new _foreign filter syntax. This extends cross-index document hydration to allow filtering on foreign indexes during retrieval.To use this feature, enable the foreignKeys experimental feature:
curl -X PATCH 'http://127.0.0.1:7700/experimental-features' \
-H 'Content-Type: application/json' \
--data-binary '{"foreignKeys": true}'
Configure foreign keys and filterable attributes in your index settings:
{
"foreignKeys": [
{
"fieldName": "actors",
"foreignIndexUid": "actors"
}
],
"filterableAttributes": [
{
"attributePatterns": [
"actors"
],
"features": {
"facetSearch": false,
"filter": {
"equality": true,
"comparison": false
}
}
}
]
}
Use the _foreign filter in search queries to filter on foreign index attributes:
{
"q": "action movies",
"filter": "genres = action AND _foreign(actors, birthDate STARTS WITH \"1958-\" AND popularity >= 3.5)"
}
This allows you to find documents based on conditions in related indexes. For example, find movies with a specific genre where actors match certain criteria.Note: Nesting foreign filters is not supported. This feature does not support remote sharding environments.
Improvements
Better Error Handling for Chat Template Updates
The engine now explicitly validates and reports document template errors when updating chat settings, providing clearer feedback on template configuration issues.Find more information on GitHub
v1.41
2026-03-30
New Features
Dynamic Search Rules with pinning
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.Rules can be created or updated with PATCH /dynamic-search-rules/{uid} and removed with DELETE /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:
{
"description": "Promote featured products for wireless headphone searches",
"active": true,
"conditions": [
{
"scope": "query",
"contains": "headphone"
}
],
"actions": [
{
"selector": {
"indexUid": "products",
"id": "featured-headphones-001"
},
"action": {
"type": "pin",
"position": 0
}
},
{
"selector": {
"indexUid": "products",
"id": "featured-headphones-002"
},
"action": {
"type": "pin",
"position": 1
}
}
]
}
Improvements
Network enabled by default in sharded instances
When network.leader is set in the instance, useNetwork now defaults to true in search requests when omitted. This allows you to naturally query all documents in a sharded context without explicitly requesting network searches.Search requests now automatically use the network when replicated sharding is enabled, ensuring all shards are covered exactly once. When network.leader is not present (particularly when no network is defined), the behavior remains identical to previous versions.
useNetwork optimizes shard selection
To prevent unnecessary network activity, when deciding which remote to ask for a shard in a network search, Meilisearch will now always pick the local instance if it owns the shard.
More efficient FST building
The construction of the word FST (word dictionary) has been improved by removing the need for a full scan of the word docids database. This drastically improves database performance when inserting a large number of documents, even when inserting only a few.Find more information on GitHub
v1.40
2026-03-23
New Features
Support for distinct in federated search
The distinct attribute can now be passed to the federation object in federated search to apply a global, cross-index and cross-remote distinct computation to the results. This works across multiple indexes and remote instances, and supports facet distribution.Example federated search request with distinct:
{
"federation": {
"distinct": "genres",
"facetsByIndex": {
"comics": [
"genres"
],
"movies": [
"genres"
]
},
"mergeFacets": {}
},
"queries": [
{
"indexUid": "comics",
"q": "batman",
"attributesToRetrieve": [
"title",
"genres"
],
"useNetwork": true
},
{
"indexUid": "movies",
"q": "superman",
"attributesToRetrieve": [
"title",
"genres"
],
"useNetwork": true
}
]
}
Important notes:
- Applying
distinctat both the query level and federation level will return an HTTP 400 error - The distinct field must be a filterable attribute for all participating indexes
- While Meilisearch attempts to compute accurate facet distribution, this cannot be guaranteed in distributed contexts since the distinct algorithm is not applied to all remote documents
Task queue compaction endpoint
Added POST /tasks/compact to compact the task queue database and reclaim space for new tasks without deleting existing tasks. This feature is behind the taskQueueCompactionRoute experimental feature flag.Note: Once task queue compaction completes, all write operations are blocked until the server is restarted.
Improvements
Faster federated search performance
Federated search is now approximately 100ms faster for all requests. Additionally, the server will no longer be blocked when processing large numbers of federated search requests.
Optimized JSON document generation
Performance improvements for handling large documents, especially when requesting only a small subset of fields from large documents.
Better memory usage for large workloads
Updated to mimalloc v3, which improves memory sharing between threads and significantly reduces memory usage on large workloads. The allocator is now overridden to use mimalloc at linking time, allowing LMDB, Meilisearch, and other C libraries to share allocations for better overall memory efficiency.Find more information on GitHub
v1.39
2026-03-16
New Features
Cross-index document hydration with Foreign Keys
A new experimental foreignKeys feature allows you to hydrate documents with related documents from other indexes.First, enable the feature via the experimental features endpoint:
curl -X PATCH 'http://127.0.0.1:7700/experimental-features' \
-H 'Content-Type: application/json' \
--data-binary '{"foreignKeys": true}'
Then configure foreign key relationships in your index settings using the foreignKeys setting:
{
"foreignKeys": [
{
"fieldName": "actors",
"foreignIndexUid": "actors"
}
]
}
With this configuration, documents containing foreign document IDs will be automatically hydrated with the full documents from the referenced index. For example, a document like:
{
"id": 1,
"title": "Forrest Gump",
"actors": [
1
]
}
Will be returned in search results as:
{
"id": 1,
"title": "Forrest Gump",
"actors": [
{
"id": 1,
"name": "Tom",
"familyName": "Hanks",
"birthDate": "1956-07-09"
}
]
}
Note: This feature does not support remote sharding environments.
Improvements
Improved Server-Sent Events (SSE) streaming
Added X-Accel-Buffering: no header to the POST /chats/{workspace_uid}/chat/completions endpoint when streaming mode is activated. This ensures that proxy response buffering is disabled for real-time streaming chat responses.
Fixed memory leak in indexation pipeline
Resolved a significant memory leak that has been present since v1.12. If you noticed Meilisearch consuming increasing amounts of memory over time, this issue is now fixed.
Restored task deletion performance
Fixed a performance regression in v1.38.1 that affected task deletion operations. Task deletion performance has been restored to v1.38.0 levels while maintaining data consistency.Find more information on GitHub
v1.38
2026-03-09
New Features
Improvements
Embeddings indexing performance significantly improved by upgrading to the latest version of Hannoy. The indexing process no longer requires full database scans, making it much more efficient to add embeddings to large databases.Task deletion has been optimized and fixed to properly clean up orphan tasks and batches from the task queue.Connection reliability improved when using remote embedders like OpenAI or VoyageAI. Fixed intermittent “connection reset by peer” errors that could occur when embedding documents or search queries.
Other
Routes in the codebase must now be declared using the routes::routes and routes::path macros to ensure they appear in the API reference documentation. This is now a mandatory requirement for new routes.Find more information on GitHub
v1.37
2026-03-02
New Features
Replicated sharding
Replicated sharding is now available in Meilisearch Enterprise Edition, allowing you to configure multiple remotes to own the same shards for data redundancy.The network object now includes a new shards field that defines how documents are distributed across remotes:
{
"leader": "ms-00",
"self": "ms-01",
"remotes": {
"ms-00": {},
"ms-01": {},
"ms-02": {}
},
"shards": {
"shard-a": {
"remotes": [
"ms-00",
"ms-01"
]
},
"shard-b": {
"remotes": [
"ms-01",
"ms-02"
]
},
"shard-c": {
"remotes": [
"ms-02",
"ms-00"
]
}
}
}
Each shard can be owned by multiple remotes, enabling full or partial replication across your network.
Managing shards with convenience fields
When updating the network configuration via PATCH /network, use addRemotes and removeRemotes for easier shard management:
{
"shards": {
"shard-a": {
"addRemotes": [
"ms-00"
]
}
}
}
{
"shards": {
"shard-a": {
"removeRemotes": [
"ms-02"
]
}
}
}
Filtering by shard
When the network feature is enabled, you can now filter documents by their shard assignment using the _shard filter:
_shard = "shard-a"
_shard != "shard-a"
_shard IN ["shard-a", "shard-b"]
This is useful for manual federated search queries across specific shards in your network.
Shard-aware federated search with useNetwork
When you use useNetwork: true in search queries, Meilisearch automatically expands the query to ensure each shard in your network configuration is queried exactly once, preventing duplicate or missing results in replicated sharding setups.
Improvements
Stabilized new vector store
The hannoy HNSW vector store is now the default and only supported vector store. All existing indexes using the legacy arroy vector store are automatically migrated during upgrade.
Faster embedding indexing
Vector indexing performance has been significantly improved. On databases with 20M documents, indexing batches of 1100 documents now complete 300 seconds faster.
Enhanced mini-dashboard security
The local web interface (mini-dashboard) now stores API keys in RAM instead of browser storage, and dependencies with potential security vulnerabilities have been updated.
Other
Breaking changes for network feature
If you are using the network experimental feature, the following changes apply:
- The
networkobject structure has changed. Whenleaderis notnull, you must now include at least oneshardobject with at least one remote in theshardsfield. - Existing databases are automatically migrated when upgraded with
--experimental-dumpless-upgrade. The migration creates shards with the same names as existing remotes, mapping each remote to its corresponding shard. This migration does not reshard any documents. - When updating a network using dumpless upgrade, follow these guidelines:
- Wait for all remotes to finish updating before calling
PATCH /network - If using
useNetwork: truesearch queries, call them on non-updated remotes first, as updated remotes will reject search requests from remotes that don’t yet support the new_shardfilters
Removed vectorStoreSetting experimental feature
The vectorStoreSetting experimental feature has been removed since the new hannoy vector store is now the only supported option.Find more information on GitHub
v1.36
2026-02-23
New Features
New Ranking Rules: attributeRank and wordPosition
Meilisearch now includes two new ranking rules that improve search relevance:
attributeRank: Documents rank higher when query words match in higher-priority searchable attributes, regardless of word position within those attributes.- `wordPositi
(本文超出站点单文档体积上限,已截断)
