​ 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-After header (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 counts
  • compute facet stats: Time spent computing facet statistics
  • facet 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.0 to increase relevancy scores (e.g., weight: 4.0)
  • Demote documents: Set weight < 1.0 to decrease relevancy scores (e.g., weight: 0.5)
  • Hide documents: Set weight = 0.0 to exclude documents from results (unless they’re also pinned)

Each scale action can target documents using:

  • filter: A Meilisearch filter expression to select documents
  • ids: An explicit list of document IDs
  • indexUid: 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 ruleUid field in score details, indicating which dynamic search rule caused the pin
  • Scaled documents display a new scale section in score details showing:
  • actions: Array of applied scale actions with ruleUid and weight
  • totalWeight: 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 disk
  • usedIndexSize: 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 time
  • GET /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-compaction flags

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-rules route to delete all rules at once
  • priority field renamed to precedence
  • conditions restructured with separate query and time condition 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

  • PATCH and DELETE /dynamic-search-rules/{uid} now return tasks instead of immediate responses
  • DELETE /dynamic-search-rules/{uid} no longer returns 404 for non-existent rules
  • The POST /dynamic-search-rules filter parameter uses query instead of attributePatterns

​ 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 attributeRank or wordPosition before words in rankingRules no longer removes hits from the response.
  • searchCutoffMs is no longer ignored under certain conditions when embedding documents.
  • Remote federated search and useNetwork: true requests 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

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 to true, index stats include an internalDatabaseSizes object showing the size of each internal database component
  • sizeFormat: Set to human to 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_SETTINGS environment variable to true.

​ 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

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 distinct at 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 network object structure has changed. When leader is not null, you must now include at least one shard object with at least one remote in the shards field.
  • 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: true search queries, call them on non-updated remotes first, as updated remotes will reject search requests from remotes that don’t yet support the new _shard filters

​ 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

(本文超出站点单文档体积上限,已截断)