New Features
Cross-index document hydration with Foreign Keys
A new experimentalforeignKeys feature allows you to hydrate documents with related documents from other indexes.First, enable the feature via the experimental features endpoint:foreignKeys setting:Improvements
Improved Server-Sent Events (SSE) streaming
AddedX-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 GitHubNew 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 theroutes::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 GitHubNew 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.Thenetwork object now includes a new shards field that defines how documents are distributed across remotes:Managing shards with convenience fields
When updating the network configuration viaPATCH /network, use addRemotes and removeRemotes for easier shard management:Filtering by shard
When the network feature is enabled, you can now filter documents by their shard assignment using the_shard filter: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 thenetwork 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 GitHubNew 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.wordPosition: Documents rank higher when query words appear closer to the beginning of an attribute.
attribute ranking rule. Now you can use them independently for more fine-grained control over search relevance. This is the first significant update to ranking rules since v1.0.Automatic Vector Store Migration
When upgrading to v1.36.0, Meilisearch automatically migrates indexes from the old Annoy vector store to the new Hannoy vector store. This migration happens without requiring a data dump and restore, though it may take a couple of minutes for indexes with large numbers of embeddings.To have more control over the migration timing, you can manually change the vector store backend beforehand by enabling thevectorStoreSetting experimental feature and setting the vectorStore root setting to experimental.Note: This vector store change affects ranking scores for vector search results.Other
Breaking Change: OpenAPI Documentation File Relocation
Themeilisearch-openapi-mintlify.json file is no longer included in release assets. If you were using this file, you can now find it in the public documentation repository.Find more information on GitHubNew Features
Search Performance Observability
All search routes now support ashowPerformanceDetails parameter that returns detailed performance metrics for your searches. When enabled, the response includes a performanceDetails field with timing information for each stage of the search pipeline.Affected routes:POST /indexes/<index_uid>/searchGET /indexes/<index_uid>/searchPOST /multi-searchPOST /indexes/<index_uid>/similarGET /indexes/<index_uid>/similar
Search Example
Request:Multi-search Example
Request:Federated Search Example
Request:Similar Documents Example
Request:Improvements
Multithreaded Post-processing Now Always Enabled
Multithreaded post-processing of facets and prefixes is now permanently enabled, removing the experimental feature flag. This results in faster indexing on multi-core machines.Other
Breaking Change: Fields Endpoint Response Format
ThePOST /indexes/<index_uid>/fields route now returns a paginated object instead of a direct array. This allows you to see how many fields match a given filter.Before:Fields Endpoint Pattern Filtering Fix
Fixed incorrect pattern matching where parent fields were incorrectly matching child field patterns. For example, atitle field will no longer match the pattern title.en.Find more information on GitHubNew Features
Network-wide search with useNetwork parameter
You can now search across your entire network of Meilisearch machines with a single request using the new useNetwork parameter. This simplifies distributed search by automatically querying all remotes in your network without manually setting up federated queries.The useNetwork parameter is available in three ways:In regular search requests:useNetwork to individual queries within a federated search:useNetwork: true is set, Meilisearch automatically queries all remotes in your network and merges the results. The response includes _federation metadata showing which remote each result came from. This feature requires the network experimental feature to be enabled.Limitations: Facet search and chat routes do not currently support useNetwork.Federated search pagination
Federated searches now support exhaustive pagination withfederation.page and federation.hitsPerPage parameters, allowing you to paginate through aggregated results from all remotes in the same way as regular searches.Improvements
Faster settings updates when removing searchable attributes
Settings changes are now processed more efficiently when you remove searchable attributes from your index configuration.Other
Security fix: Restrict outbound requests to non-global IP networks
Meilisearch now prevents outbound web requests (webhooks, embedders, and network machine connections) from reaching non-global IP addresses by default. This blocks requests to private networks like192.168.x.x, 10.x.x.x, and localhost, preventing potential firewall bypasses.If you need to allow requests to private networks, use the --experimental-allowed-ip-networks CLI flag or MEILI_EXPERIMENTAL_ALLOWED_IP_NETWORKS environment variable:- Default (not set): All requests to non-global IPs are blocked
- Comma-separated CIDR networks: Allow requests only to specified networks, e.g.
192.168.0.0/16,10.0.0.0/8 any: Allow all requests regardless of target IP (use only in controlled environments)
Database size increase for authentication
The authentication store database size has been increased to 2 GiB to support indexing more API keys.Find more information on GitHubNew Features
Fields endpoint
A new POST/indexes/{indexUid}/fields endpoint returns detailed metadata about all fields in an index. This provides comprehensive information about each field’s configuration, including display, search, filtering, and localization settings.Improvements
Faster dumpless upgrades
The dumpless upgrade process for instances before v1.32.0 is now significantly faster. By multi-threading database fetches during parallel cleanup of old field IDs, upgrade times have improved from approximately 2 hours 50 minutes to less than 7 minutes.Enhanced vector search quality
The vector store has been updated to improve search performance and result quality on larger databases. Linear scanning now triggers more intelligently, particularly when the number of filtered candidates is small relative to the total documents in the index.Better ranking with vector search and sorting
Fixed a bug where only the first non-blocking buckets were considered for non-final ranking rules. Search results are now higher quality when vector search and sorting are combined, especially when the search cutoff is triggered.Other
Security fix: Dump import vulnerability
All versions of Meilisearch before v1.33.0 are vulnerable to a path traversal vulnerability in the dump import functionality. Importing a specially crafted dump could grant access to arbitrary files on the file system of the Meilisearch instance.If you allow importing dumps from untrusted sources, update to v1.33.1 or later. Cloud users require no action as there is no evidence of exploitation on Meilisearch Cloud.Find more information on GitHubNew Features
Skip field-ID-based database cleanup during upgrades
Introduces aMEILI_EXPERIMENTAL_DISABLE_FID_BASED_DATABASES_CLEANUP environment variable that allows you to opt out of the field ID-based database cleanup when upgrading from Meilisearch versions prior to 1.32.0. This provides flexibility for users who need to control the upgrade process.Improvements
Enhanced search performance visibility with detailed logging
Adds comprehensive progress tracking and logging for search operations, including detailed timing information for each step of the search process. This enables better observability and performance analysis for your search queries.Parallel document operation extraction for faster indexing
Accelerates document indexing by processing document operations in parallel during the payload preparation phase. This includes parallel extraction of changes and internal ID assignment. Performance improvements scale with CPU availability - testing shows approximately 7x speedup on four-million-document insertions using four CPUs.Note: TheindexedDocuments field in tasks using skipCreation may report higher counts than the actual number of operations for POST and PUT requests. The documents are indexed correctly; only the reported count may be impacted as speed is prioritized over perfect accuracy in this optimization.Other
Vector sort bucketing fix
Fixed vector sort to properly group documents with identical similarity scores, ensuring subsequent ranking rules are applied correctly to bucketed results.Document deletion from field-ID-based databases
Resolved a bug where changingsearchableAttributes from ["*"] to a subset of fields left orphaned data in field-ID-based databases, causing corruption and warnings during search operations.Graph link rebuilding for dumpless upgrades
Updated hannoy to v0.1.3-nested-rtxns, which fixes graph-related recall issues and adds functionality to rebuild graph links for recovering previously malformed graphs. Also fixed a minor issue in the dumpless upgrade flow where upgrade descriptions were not displayed correctly.Fixed panic on dumpless upgrade with empty indexes
Resolved a panic that occurred when performing dumpless upgrades on empty indexes with configured embeddings.Find more information on GitHubNew Features
Allow strict document update without creating missing documents
Added an optionalskipCreation query parameter to document update endpoints. When set to true on POST or PUT requests to /indexes/{index}/documents, documents that don’t exist in the index are silently ignored rather than created. The default value is false, which preserves the existing behavior of creating new documents.Example usage:Improvements
S3-streaming snapshots now available as Enterprise Edition feature
S3-streaming snapshots functionality is now exclusively available in the Enterprise Edition. This requires a license for self-hosted deployments. On-disk snapshots remain available in all editions. If you’re using the Community Edition between versions 1.25 and 1.30, you can continue using S3 Streaming without a license.AWS IRSA authentication support for S3 snapshots
Added support for AWS IRSA (IAM Roles for Service Accounts) authentication when performing snapshots to S3. This allows the use of short-lived access and secret keys for more secure snapshot uploads. This feature is available in the Enterprise Edition and can be configured through new experimental CLI parameters.Find more information on GitHubImprovements
Network scaling with dynamic topology changes
Meilisearch Enterprise Edition now supports modifying the number of participants in a sharded network without restarting or migrating to a new cluster. You can scale up by adding new remotes or scale down by removing existing ones.Setting up the initial network:-
Designate a leader machine that will receive all write operations. Any write request to a non-leader machine will return a
not_a_leadererror. -
Configure your network topology by calling
PATCH /networkon the leader:
- The network configuration is automatically propagated to all members.
- Send documents and settings only to the leader—they will be distributed across all network participants with automatic sharding.
PATCH /network on the leader with the new remote’s information:networkTopologyChange task will automatically rebalance documents across all remotes, including the new one.Removing a remote:Call PATCH /network on the leader and set the remote to null:networkTopologyChange task will automatically redistribute documents from the removed remote to the remaining participants.macOS binary availability restored
Themeilisearch-enterprise-macos-amd64 and meilisearch-macos-amd64 binaries are now available again after being unavailable in v1.29.Improved task handling during index operations
Tasks are now properly attributed during index swaps to prevent cross-index task loss.Search stability improvement
Fixed an issue that could cause search requests to fail with an internal error about missing field weights. The system now logs a warning instead of crashing when encountering incomplete field weight mappings.Other
Breaking changes for network sharding users
These changes only affect Enterprise Edition users with automatic sharding enabled (network.leader set). Standard feature users are not affected.Network object structure changes:- The
shardingboolean field has been removed - A new
leaderfield (optional string) has been added to designate the cluster leader - A new
versionfield (UUID) has been added to track network state
not_a_leader error when called on non-leader machines:POST /indexesPATCHorDELETE /indexes/{indexUid}POST,PUT, orDELETE /indexes/{indexUid}/documentsPOST /indexes/{indexUid}/documents/deletePOST /indexes/{indexUid}/documents/delete-batchPOST /indexes/{indexUid}/documents/editPATCHorDELETE /indexes/{indexUid}/settingsand related settings routesPATCH /network(when changing the leader)POST /swap-indexes
PATCH /network now returns a NetworkTopologyChange task summary instead of the network object itself.Dump import behavior:
When importing dumps, the self and leader fields are dropped from the network configuration.Network topology change task cancellation:
NetworkTopologyChange tasks can be cancelled. When cancelled, documents that have already been moved remain in their new locations, while the network topology reverts to its previous state.Find more information on GitHubImprovements
New settings indexer supports searchable and exact attributes
The improved settings indexer now handles changes tosearchableAttributes, exactAttributes, proximityPrecision, and embedders settings. This indexer provides better scalability, near-instant cancellations, and displays indexing progress.The new indexer is enabled automatically when a settings batch contains only changes to these fields. Any other settings changes will use the legacy indexer. For OSS users, you can disable the new settings indexer by setting the MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS environment variable to true.New vector store enabled by default for new indexes
Starting with v1.29.0, newly created indexes will automatically use the improved vector store backend introduced in v1.21.0, which provides better performance and relevancy. Existing indexes remain unchanged and continue using their current backend.Additional HuggingFace embedder models supported
ThehuggingFace embedder now supports models with XLM Roberta architecture, giving you more options for local CPU and GPU-based embeddings.Other
Build requirement change
The git binary must now be present at build time to populate thecommitSha1 field in the /version endpoint response. This change was made to improve build performance.Find more information on GitHubNew Features
Better language support for Thai, Khmer, and German
Improved word segmentation for Thai, Khmer, and German languages through an upgrade to Charabia v0.9.9. This provides more accurate text processing and search results for these languages.Batch progress traces on metrics route
Batch progress information is now exposed on the metrics route, improving the debugging experience when monitoring indexing operations.Improvements
Separated Community and Enterprise editions
Meilisearch now offers separate binary editions. Community Edition binaries retain their original names and remain under the MIT license. Enterprise Edition binaries are identified by “enterprise” in their names and are available under the BUSL-1.1 license. Docker images for the Enterprise Edition are available in thegetmeili/meilisearch-enterprise repository.Other
Document sorting fix
Fixed an issue where documents without a sortable attribute were incorrectly handled when using the sort parameter on the/documents endpoint. Documents without the sortable attribute are now correctly returned after those that have the attribute.Metrics route memory usage fix
Fixed a critical bug in the Prometheus metrics route (/metrics) that could cause high memory usage and out-of-memory errors when an instance has too many tasks. If you are using the metrics route, upgrade to v1.28.2 or later, or clean up succeeded or failed tasks using the task management API.Find more information on GitHubNew Features
None in this release.Improvements
Better error messages for S3 snapshot uploads
Errors that occur during S3 snapshot uploads are now displayed in the task queue, making it easier to debug snapshot upload issues.Improved task ingestion performance
The default batch size for batched tasks now defaults to half of the max indexing memory, providing better performance during task ingestion.Other
Fixed embedding operation skipping documents
A bug has been fixed that could cause Meilisearch to skip documents during embedding operations:- When using a Hugging Face embedder, every
available_parallelismth document in a batch was ignored - When using a REST embedder with only one embedding per request, every 40th document in a batch was ignored
- Enable the
multimodalexperimental feature - Search or fetch with filter:
NOT _vectors EXISTSto find documents without vectors
Fixed document pagination bug
The/documents/fetch endpoint no longer returns duplicated results when paginating through sorted documents.Find more information on GitHubNew Features
Custom metadata for document tasks
You can now attach custom metadata to document-related tasks to easily track which documents were processed by Meilisearch. When you create or update documents, add thecustomMetadata query parameter to any supported route:POST /indexes/{indexUid}/documentsPUT /indexes/{indexUid}/documentsDELETE /indexes/{indexUid}/documents/{documentId}POST /indexes/{indexUid}/documents/delete-batchPOST /indexes/{indexUid}/documents/deletePOST /indexes/{indexUid}/documents/editDELETE /indexes/{indexUid}/documents
More models for HuggingFace embedder
The HuggingFace embedder now supports models with themodernBERT architecture for local CPU or GPU embeddings. This includes models like Ruri v3 and other modernBERT models available on HuggingFace.Improvements
Embedder failure modes (Experimental)
You can now configure how Meilisearch handles embedder-related errors. Choose to ignore:- Document template rendering failures
- Embedder request failures (including missing vectors in
userProvidedembedders) - Both types of errors
- Cloud customers: Contact support
- OSS users: Set the
MEILI_EXPERIMENTAL_CONFIG_EMBEDDER_FAILURE_MODESenvironment variable to a comma-separated list of error types to ignore: ignore_document_template_failuresignore_embedder_failures
REST embedder timeout control (Experimental)
You can now configure the timeout duration for REST embedder requests.To enable this experimental feature:- Cloud customers: Contact support
- OSS users: Set the
MEILI_EXPERIMENTAL_REST_EMBEDDER_TIMEOUT_SECONDSenvironment variable to a positive integer representing seconds
New Features
Search personalization
Add the ability to dynamically rerank search results using Cohere with a personalized prompt. This experimental feature allows you to customize result ordering based on user preferences and context.Upload snapshot tarballs to S3
Add the ability to upload snapshots directly to S3. This experimental feature streams the entire snapshot process and utilizes multipart technology to send chunks of data in parallel, making snapshot uploads more efficient.Improvements
German word segmentation
Improved German text segmentation to skip segmenting unknown words instead of breaking them into bigrams. This ensures that German words not in the dictionary remain intact during indexing.Note: If you have a Meilisearch database containing German words, you must reindex your data manually.Chinese text segmentation with numbers and English
Enhanced Chinese text segmentation to prevent splitting of numbers and English words that appear alongside Chinese characters. Numbers and English text are now segmented consistently.Note: If you have a Meilisearch database containing Chinese words, you must reindex your data manually.Other
Breaking change: Authorization header redaction in webhooks
The value of theAuthorization header is now redacted when getting webhooks or in responses from posting a new webhook or deleting a webhook. Previously, the header value was returned in these responses, which posed a security risk. If you were relying on retrieving the Authorization header value through the API, this will no longer be possible.Find more information on GitHubNew Features
Search Metadata Header
A newMeili-Include-Metadata header is now available on search requests. When included, the response will contain a metadata field with information about each query, including a unique identifier (uid), the indexUid, and the index’s primary key.Improvements
Vector Store Search Cutoff
Improved the interaction between the vector store and thesearchCutoffMs parameter when using the "vectorStore": "experimental" index setting. This provides better control over search performance and timeout behavior when working with vector-based searches.Compaction Behavior
Enhanced compaction interactions with task cancellation, resulting in more reliable behavior when managing background indexing tasks.Find more information on GitHubNew Features
Index Compaction Task
A new compaction endpoint is now available for indexes. This task defragments the LMDB environment used by each index, which reduces fragmentation that accumulates over time. Indexes typically experience around 30% fragmentation, and compaction can provide significant performance improvements—2-4x speed-ups in search and indexation operations. This is achieved by reordering LMDB internal pages and removing scattered free pages throughout the file, relocating content to the beginning for better cache efficiency.Improvements
Parallelized Facet Post-Processing
Facet post-processing during indexation is now multi-threaded. Previously, iterating over index prefixes was done in a single-threaded loop, which was a bottleneck. This redesign delivers 4-6x performance improvements for facet-related operations.Request UID Added to Search Routes
Search routes now include the request UID in responses, making it easier to track and correlate requests across your system.Find more information on GitHubNew Features
Geojson Filtering Support
A new geo backend has been introduced to store and filter geojson data. You can now:- Make the
_geojsonfield filterable in your index settings - Send documents with a
_geojsonfield containing valid geojson - Filter your documents using the new
_geoPolygonfilter, or continue using the existing_geoBoundingBoxand_geoPointsfilters
Improvements
Remote Federated Search Timeout Configuration
The timeout for remote federated search has been made configurable. Previously set to a fixed 30 seconds, you can now customize this value by setting theMEILI_EXPERIMENTAL_REMOTE_SEARCH_TIMEOUT_SECONDS environment variable to a positive integer. This allows you to better accommodate different search configurations and network conditions.Note: This configuration is only available via environment variable; no CLI flag or configuration file entry is available at this time.Find more information on GitHubNew Features
Vector Store Backend
A new vector store backend is now available for improved performance, especially when using binary quantization. To use it:- Enable the
vectorStoreSettingexperimental feature - Change the
vectorSettingindex setting to"experimental"for the indexes where you want to try the new vector store
Persian Language Support
Added support for Persian language through an update to the character analysis library.Improvements
Indexing Progress Trace
Fixed an issue where observing the progress trace during indexing could cause parts of the trace to be lost.Other
Dumpless Upgrade Fix
If you encountered a decoding error when upgrading with arest embedder, use the dumpless upgrade to v1.21 to fix this issue.Find more information on GitHubImprovements
Display progress trace in in-progress batchesIn-progress batches now display theprogressTrace field, giving you better visibility into the execution progress of your batch operations.Find more information on GitHubNew Features
Automatically shard documents to scale horizontally
Meilisearch can now automatically distribute documents between multiple instances using the new sharding feature. This allows you to scale Meilisearch horizontally by spreading your data across multiple instances.Note: Sharding is available exclusively in Meilisearch Enterprise Edition (EE). The EE features are governed by the Business Source License 1.1, which allows you to use, test, and develop with sharding for free in non-production environments. Please contact sales before using it in production.Improvements
Enhance hybrid search with filter performance
Hybrid search combined with filters has been optimized. In previous versions, mixing hybrid search with filters could significantly increase search time:New Features
Query vector in search response
The search response now includes thequeryVector when using the retrieveVectors parameter, making it easier to understand which vector was used for your search.Retrieve vectors from specific embedders
You can now retrieve documents with vectors from specific embedders, giving you more control over which embeddings are returned in search results.Rename indexes via API
Indexes can now be renamed using the API, providing a programmatic way to manage your index lifecycle.Improvements
Performance and usability improvements to vector handling and index management.Find more information on GitHubNew Features
Webhook API support A new Webhook API is now available, allowing you to set up webhooks for various events in Meilisearch.Chat completions route A new chat completions endpoint enables you to turn search queries into conversations. This works with your favorite LLMs and is easy to integrate into your applications.Improvements
STARTS_WITH filter optimization TheSTARTS_WITH filter has been optimized and stabilized for better performance. You no longer need to activate the experimental feature to use this operator.OpenAPI file publishing
The OpenAPI specification file is now published with each release as a release asset for easier integration with tools and SDKs.Other
Chat settings endpoint change The chat settings endpoint has changed fromPUT to PATCH. If you have integrations or custom implementations using the old PUT method, you’ll need to update them to use PATCH instead.Find more information on GitHubNew Features
Multimodal Embeddings
Index and search images alongside text documents using AI-powered multimodal embedders. This experimental feature allows you to create a common semantic representation for images, texts, and other data types, enabling searches with image queries.Enable the feature:Export Route for Data Migration
Transfer documents between Meilisearch instances without creating dumps or snapshots. This is particularly useful when migrating from a local machine to Meilisearch Cloud.Improvements
Better Nested Wildcard Support
Added support for nested wildcards inattributes_to_search_on, allowing more flexible search field configurations.Improved Geo Field Extraction
Enhanced the extraction of geographic fields from documents for more accurate geo-based filtering and search.CPU Utilization During Dump Import
Dump imports now use all available CPUs for faster processing.Live Embedder Error Display
The last embedder error is now displayed live in batches, making it easier to diagnose embedding issues.Fallback Instance Option
Added the ability to revert to the old indexer using a fallback instance option for compatibility purposes.Filters in Chat Completions
Chat completions now support filters, enabling more precise control over the results used in completions.Document Route Sorting
The/documents route now supports sorting, giving you more control over how documents are retrieved.Read-Only Admin Key for New Databases
New empty databases now automatically create a Read-Only Admin key to prevent accidental writes while investigating your database.Edition 2024 Indexer in Dumps
Dumps now use the updated edition 2024 documents indexer for better compatibility.Other
Experimental Features and Configuration Changes
- A fallback instance option is available to revert to the old indexer if needed
- The
--experimental-limit-batched-tasks-total-sizeenvironment variable now works correctly - The
disableOnNumberssetting is now properly affected by typo tolerance resets - New databases include a Read-Only Admin key for safer exploration
New Features
Disable typo tolerance for numbers
SettypoTolerance.disableOnNumbers to true to disable typo tolerance for numbers:2024 returning results that include 2025 and 2004. It may also improve indexing performance.Lexicographic string filters
You can now filter strings lexicographically using comparison operators (<, <=, >, >=, TO) on string values:Chat with your indexes
Create a chat workspace with the appropriate settings to enable conversational features:Improvements
- Allow cancelling an upgrade to a new Meilisearch version by rolling back all upgraded indexes
- Support EC private key as SSL certificate
- Stop compacting snapshots when passing the relevant CLI option, speeding up snapshot generation
- Add new
batchStrategyfield in the batches stats - Add log field tracking time spent searching in the vector store
- Improve filterable error messages
- Improve error messages on embeddings dimension mismatch
- Update
/networkURL validation error message format - Expose the task queue’s status size in Prometheus metrics
- Fix
_matchesPositionlength calculation to improve client-side cropping - Fix
_georanking rule
Other
- Fix a panic in search that could occur when looking for typos with a search prefix having more than 65k possible hits
- Ensure that passing
MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKSset to 0 results in Meilisearch never processing any tasks - Forbid value
0formaxTotalHitsin index settings - Allow
documentTemplates to use array filters on documents (e.g.,join) - Fix searchable attributes database bug where some searchable fields were removed from the searchable databases when removed from
filterableAttributessetting - Fix chat route missing base URL and Mistral error handling
- Fix various issues with embedding regeneration
New Features
Granular filterable attribute settings
Control which types of filters you want to enable for each attribute in your documents. UsePATCH /indexes/INDEX_NAME/settings to specify filter features like equality, comparison, and facet search on a per-attribute basis:Composite embedders
Use different embedders at search and indexing time to optimize AI-powered search performance. For example, use a remote embedder during indexing (higher bandwidth) and a local embedder during search queries (lower latency).To use composite embedders:- Enable the feature with the
/experimental-featuresroute:
- Create an embedder with
sourceset to"composite", defining bothsearchEmbedderandindexingEmbedder:
indexingEmbedder during indexing and the searchEmbedder when responding to search queries.Retrieve multiple documents by ID
Fetch multiple documents at once by providing their IDs:Improvements
Batch document requests
You can now batch together/documents requests using either PUT or POST methods, improving efficiency when working with multiple documents.Enhanced batch progress tracking
The/batches route now displays timestamped internal indexing steps, giving you better visibility into the indexing process. Batch progress view has also been extended to include indexing of vectors.Exhaustive facet count parameter
The/facet-search route now supports an exhaustiveFacetCount parameter to retrieve an exact facet count instead of estimates.Reduced memory consumption
Arroy (the vector storage component) now uses less RAM, improving overall memory efficiency for vector operations.Experimental embedding cache
An experimental feature to cache embeddings during search is now available, potentially improving search performance for repeated queries.Armenian character handling
Armenian characters are no longer case-sensitive in searches, improving search accuracy for Armenian language content.Optimized reindexing
Searchable attributes no longer trigger reindexing when only their order changes, reducing unnecessary processing.Improved task handling
Cancellation tasks can now be accepted even when the disk is full, ensuring better reliability of task management.Other
Breaking behavior change
EnablingrankingScoreThreshold no longer causes _rankingScore to be miscalculated, fixing a significant issue with ranking score accuracy when using threshold filters.Find more information on GitHubNew Features
AI-powered search is now stable and enabled by default
AI-powered search is available to all users by default and no longer requires manual activation. Vector search, semantic search, and hybrid search capabilities are now production-ready.Dumpless upgrades
Upgrade to new Meilisearch releases without generating a dump file. Use the--experimental-dumpless-upgrade flag when starting Meilisearch after updating the binary:Warning: Meilisearch recommends generating a backup snapshot before upgrading. This is an experimental feature, and failed upgrades may lead to database corruption.
Remote federated search requests
Query multiple Meilisearch instances simultaneously using the/multi-search route. This is particularly useful when handling very large databases.First, enable the network experimental feature:self instance and multiple remotes using the /network endpoint:/multi-search query with the new federationOptions.remote parameter:Improvements
Enhanced monitoring and performance insights
- New
usedDatabaseSizefield on the/statsroute to track actual database usage - Embeddings information now exposed on the
/statsroute - Prometheus metrics added to measure task queue latency
- Faster listing of indexes
- Improved task auto-batching with ability to limit total batch size
Better error messages
Improved error message when an attribute is not filterable, making it easier to debug search configuration issues.Other
Breaking changes
vectorStoreis no longer an accepted value for the/experimental-featuresroute- Ollama URLs must end with either
/api/embedor/api/embeddings - Error codes have been refined:
invalid_embedderhas been split intoinvalid_search_embedderandinvalid_similar_embedderfor search and similar endpointsinvalid_hybrid_queryhas been renamed toinvalid_search_hybrid_query
New Features
Significant indexing speed improvements
Meilisearch v1.12 introduces major performance improvements for indexing:- More than twice as fast for raw document insertion tasks
- More than 4x faster for incrementally updating documents in large databases
- Embeddings generation improved up to 1.5x for some workloads
- Performance is maintained or improved on smaller machines
- Task cancellation is also faster
New index settings: facetSearch and prefixSearch
Two new index settings allow you to skip parts of the indexing process for additional speed improvements, though this may impact search experience in some use cases.facetSearch toggles facet search for all filterable attributes. Default is true:prefixSearch configures prefix search capability. Accepts:"indexingTime": enables prefix processing during indexing (default)"disabled": deactivates prefix search completely
prefixSearch is disabled, queries like he will no longer match hello, but indexing is significantly faster.New API route: /batches
Query information about task batches with the new /batches endpoint.GET /batches returns a list of batch objects with the same query parameters as GET /tasks:GET /batches/:uid retrieves information about a single batch:batchUid field to link tasks to their batch:Improvements
Phrase search with showMatchesPosition
Phrase searches with showMatchesPosition set to true now return a single location for the whole phrase instead of individual term locations.Array field match positions
When a query finds matching terms in document fields with array values, Meilisearch now includes anindices field in _matchesPosition specifying which array elements contain the matches.New query parameter for /tasks
The GET /tasks endpoint now accepts a reverse parameter. When set to true, tasks are returned in reversed order from oldest to newest.New Prometheus metrics
Additional Prometheus metrics have been added for better monitoring and observability.Better error messages
Error messages now include the index name for improved clarity when debugging issues.Other
Breaking change: vectorStore field distribution
The vectorStore field in field distribution no longer contains _vectors. The previous value was incorrect, and there is no current use case for the fixed value.Find more information on GitHubNew Features
AI-powered search improvements
Meilisearch v1.11 introduces several changes to AI-powered search as part of stabilization efforts:- Binary quantization for embeddings: Enable the new
binaryQuantizedoption to convert floating-point embeddings into boolean values. This significantly improves performance and reduces database size (up to 10x reduction and 6x faster indexing) but impacts relevancy. This option cannot be reverted once enabled.
-
Document template improvements: The
documentTemplatefield now includes a newfield.is_searchableproperty. The default template now filters out empty fields and non-searchable attributes for better embedding quality. -
New embedder option:
documentTemplateMaxBytesallows you to truncate document template text when it exceeds a specified byte limit. -
Updated default OpenAI model: The default embedding model is now
text-embedding-3-smallinstead oftext-embedding-ada-002.
Federated search enhancements
Two new federated search options have been added to support facet queries:facetsByIndex: Request facet distribution and stats for each index separately in federated searches
mergeFacets: Merge facet data from multiple indexes into a single result set
Experimental STARTS WITH filter operator
A new experimentalSTARTS WITH filter operator is available. Enable it through experimental features:Language support improvements
- Added ISO-639-1 language variants and automatic conversion to ISO-639-3
- New German language tokenizer
- Improved Turkish language support
- Fixed Swedish character normalization so
å,ä, andöare no longer normalized
Improvements
- Improved error handling when using
query.facetswith federated search (now returns appropriate error instead of silently ignoring the parameter) - Fixed facet value truncation to correctly apply
maxValuesPerFacetlimits - Improved task cancellation when vectors are used
- Better timeout handling for embedding requests during search (3s timeout added)
- Added timeouts to read and write operations
- Retry logic added for deserialization failures in remote embedding providers (REST/OpenAI/ollama)
- Improved vector display when no custom vectors were provided
- Updated Rhai to fix errors when updating documents with functions
- Batch failed logs now appear at error level
- Removed forced capitalization in search UI fields
Other
Breaking changes
- When performing AI-powered searches,
hybrid.embedderis now mandatory inGETandPOST/indexes/{:indexUid}/search hybridmust now be passed even for pure semantic searchesembedderis now mandatory inGETandPOST/indexes/{:indexUid}/similarsemanticRatiois ignored for queries that includevectorbut notq(performs pure semantic search instead)- When using federated search,
query.facetsat the query level now returns an error instead of being silently ignored. Usefederation.facetsByIndexinstead.
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.Minimum Ubuntu version requirement
Meilisearch now requires Ubuntu 20.04 or later. Ubuntu 18.04 is no longer supported due to GitHub Actions runner requirements.Find more information on GitHubNew 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)
New Features
Hybrid search enhancements
Meilisearch now supports two new embedder sources for hybrid search:Ollama model - Run language models locally using the Ollama framework:Negative keywords
Exclude specific terms from search results using the- operator:-escapereturns documents that do not contain “escape”-escape roomreturns documents containing “room” but not “escape”-"on demand"returns documents that do not contain the phrase “on demand”
Search cutoff timeout
Configure a timeout for search requests to prevent crashes and performance issues. Set a custom timeout value using the/settings endpoint:null to disable the cutoff.Improvements
Indexing performance
Increased indexing speed when updating settings.Search stability
Added a limit for concurrent search requests to prevent unbounded RAM consumption. Launch your instance with a custom limit:Facet sorting
ThesortFacetValuesBy setting now impacts the /facet-search route for consistent facet value ordering.Hybrid search improvements
- Return keyword search results even if embedding generation fails during hybrid searches
- Added
semanticHitCountfield to search responses indicating the number of hits from semantic search - Improved search logs to exclude
hitsfrom DEBUG log level output
Tokenizer improvements
Enhanced tokenization with support for:- Markdown formatted code blocks
- Improved Korean segmentation
- Tab character (
\t) recognition as a separator - Optional pinyin normalization for Chinese text
Vector embeddings in dumps
Vectors are now included in database dumps, providing an upgrade path to future versions without requiring regeneration of embeddings for auto-generating embedders.Other
Breaking changes: Semantic search scoring
To improve search response times and reduce bandwidth:_semanticScoreis no longer returned in search responses; use_rankingScoreinstead- The
vectorfield is no longer included in search responses - Query vectors are no longer displayed when
"showRankingScoreDetails": trueis set
New Features
New OpenAI embedding models
When configuring OpenAI embedders, you can now specify two new models:text-embedding-3-smallwith a default dimension of 1536text-embedding-3-largewith a default dimension of 3072
Custom OpenAI model dimensions
You can configuredimensions for sources using the new OpenAI models: text-embedding-3-small and text-embedding-3-large. Dimensions must be greater than 0 and smaller than the model size:text-embedding-ada-002. Setting dimensions to any value except the default size of these models will result in an error.GPU support for Hugging Face embeddings
Activate CUDA to use Nvidia GPUs when computing Hugging Face embeddings. This can significantly improve embedding generation speeds.To enable GPU support through CUDA:- Install CUDA dependencies
- Clone and compile Meilisearch with the
cudafeature:cargo build --release --package meilisearch --features cuda - Launch your freshly compiled Meilisearch binary
- Activate vector search
- Add a Hugging Face embedder
Stabilized showRankingScoreDetails
The showRankingScoreDetails search parameter is now a stable feature. Use it with the /search endpoint to view detailed scores per ranking rule for each returned document:showRankingScoreDetails is set to true, returned documents include a _rankingScoreDetails field with detailed scoring information for each ranking rule.Experimental JSON log output
Configure Meilisearch to output logs in JSON format by passingjson to the --experimental-logs-mode command-line option:--experimental-logs-mode option accepts two values:human: default human-readable outputjson: JSON structured logs
Experimental /logs/stream and /logs/stderr routes
Two new experimental API routes allow you to manage log output:Activate the routes using the /experimental-features endpoint:/logs/stream - Stream logs in real-time:target: Defines log level and which part of the engine to apply it to. Format:code_part=log_level. Valid log levels:trace,debug,info,warn,error, oroffmode: Acceptsfmt(basic) orprofile(verbose trace)
/logs/stderr - Configure default log output:target: Defines log level and which part of the engine to apply it to. Format:code_part=log_level. Valid log levels:trace,debug,info,warn,error, oroff
Experimental cluster mode
New experimental feature to change the behavior of Meilisearch to run in a cluster by externalizing the task queue.Improvements
Improved indexing speed and reduced memory usage
- Auto-batch task deletion reduces indexing time
- Hybrid search experimental feature indexing is now more than 10 times faster
- Capped the maximum memory of grenade sorters to reduce memory usage
- Multiple technical improvements to indexing pipeline
- Enhanced facet incremental indexing
- Improved threshold triggering incremental indexing
Improved logging
Log messages now follow a new pattern:Multiple language support improvements
Expanded support for multiple languages, including improved Vietnamese normalization (Ð and Đ are now normalized to d). Updated to Charabia v0.8.7.Additional improvements
- Added content type to webhook requests
- Skip reindexing when modifying unknown faceted fields
- Added timeout to webhook requests
- Enhanced Prometheus experimental feature with job variable in Grafana dashboard
Other
Breaking changes - Log output format
Log messages now follow a different pattern. If you have automated tasks based on log output parsing, you may need to update them to work with the new format.Find more information on GitHubNew Features
Automated embeddings generation for vector search
Meilisearch can now automatically generate embeddings using OpenAI, HuggingFace, or your own pre-computed vectors. Configure embedders in your index settings:documentTemplate field uses Liquid format to define what content gets embedded. The model parameter specifies which OpenAI or HuggingFace model to use.Hybrid search
Combine keyword and semantic search in a single query using the newhybrid parameter:semanticRatio controls the balance between semantic and keyword search (0 = pure keyword search, 1 = pure semantic search, default = 0.5).Task queue webhook
Receive notifications when Meilisearch finishes processing tasks by configuring a webhook:MEILI_TASK_WEBHOOK_URL and MEILI_TASK_WEBHOOK_AUTHORIZATION_HEADER environment variables or in your configuration file.Experimental: Limit batched tasks
Control how many tasks Meilisearch batches together to improve system stability:MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKS environment variable or in your configuration file.Improvements
Indexing performance
Meilisearch v1.6 significantly improves indexing speed by storing less internal data and only re-indexing the specific fields you update. On a 2.5GB e-commerce dataset, initial document addition is over 50% faster. Partial document updates show 50-75% performance improvements depending on your dataset and indexing patterns.Disk space reduction
Database disk usage is now 40-50% smaller on typical datasets due to reduced internal data storage. Database growth is also more stable with new document additions.Proximity ranking rule precision
Control the accuracy and performance of proximity-based ranking:byWord (exact distance, default) or byAttribute (faster but less precise, checks only if words appear in the same field).Other
Vector search breaking changes
If you’ve used vector search in v1.3.0 through v1.5.0, update your implementation:- When using both
qandvectorparameters together, you must now include thehybridparameter - Vectors must be JSON objects instead of arrays:
- Define a model in your embedder settings (previously optional for user-provided embeddings):
New Features
Snapshots on-demand
A new/snapshots API route allows you to create snapshots manually whenever needed:/snapshots directory, which you can customize using the --snapshot-dir configuration option.Experimental feature: Export Puffin reports
Meilisearch can now automatically export.puffin reports to help diagnose performance issues. Enable this experimental feature using the /experimental-features endpoint:Improvements
Indexing speed improvements
Indexing speed has been improved for text-heavy datasets. Datasets with fields containing more than 100 words should see a 5% to 20% reduction in indexing times. Gains are proportional to the amount of words in a document. Note: indexing speed improvements may not be visible in datasets with fewer than 20 words per field.Please be aware that this optimization might result in minor impact to search result relevancy for queries containing 4 words or more. Contact the Meilisearch team if this significantly affects your application.Additional improvements
- The experimental
/metricsroute can now be activated via HTTP in addition to CLI flags - Added Khmer language support
- The
meilitoolcommand-line interface is now integrated into the Meilisearch Docker image, providing commands to enforce task cancellation and dump creation for stuck instances. Usemeilitool --helpin the running container for usage information
Other
Breaking changes and fixes
- Vector size validation: The API now throws an error when a vector in a search query does not match the size of already indexed vectors
- Fixed search operations on the processing index from hanging
- Fixed search on exact attributes using
attributeToSearchOn
New Features
Customize text separators
Meilisearch word segmentation now supports customization through two new index settings:separatorTokens and nonSeparatorTokens.Add a character to the separatorTokens list to use it as a word separator:nonSeparatorTokens list when you don’t want Meilisearch to use it to separate words:Load user-defined dictionaries
Expand Meilisearch’s default language-based dictionaries with domain-specific terms using the newdictionary index setting. This improves word segmentation accuracy for specialized vocabularies:dictionary setting works alongside existing stopWords and synonyms settings:Improvements
Enhanced data privacy in error messages
Hidden document fields are no longer displayed in error messages. When attempting to sort by a non-sortable field while other non-displayed sortable fields exist, you’ll see a message like:Improved filter parameter handling with backslashes
Fixed a bug preventing proper use of backslash characters infilter search parameter expressions. This change requires updating how backslashes are escaped in filters.If you use backslashes in filter expressions, you must now escape them. For example:- Before v1.4.0:
path = "my\\test\\path" - From v1.4.0:
path = "my\\\\test\\\\path"
\\\\ to \\, and then Meilisearch unescapes \\ to a single \.Search performance improvements
Improved indexing speed when importing dumps by using buffered readers and writers.Other
Breaking change: Backslash escaping in filter expressions
Users with backslash characters infilter search parameters must update their filter expressions. All backslashes now require escaping at the Meilisearch filter level (in addition to any JSON escaping).For a document with path: "my\test\path" stored as "my\\test\\path" in JSON, the filter syntax changed:- Previously:
path = "my\\test\\path"(only JSON escaping) - Now:
path = "my\\\\test\\\\path"(JSON + Meilisearch filter escaping)
New Features
Vector Search (Experimental)
Meilisearch now supports vector search, allowing you to use it as a vector store. You can add vector embeddings generated by third-party tools (such as Hugging Face, Cohere, or OpenAI) and search using vector similarity.Enable vector search via the experimental features endpoint:_vectors field:/search or /multi-search endpoints:_semanticScore field (0 to 1) indicating relevance:Ranking Score Visibility
Use theshowRankingScore search parameter to see how relevant each document is to your query:_rankingScore field (0 to 1, higher is more relevant).Ranking Score Details (Experimental)
Get detailed scoring breakdowns per ranking rule using the experimentalshowRankingScoreDetails parameter:_rankingScoreDetails object showing scores for each ranking rule (words, typo, proximity, attribute, exactness).Define Searchable Fields at Query Time
The newattributesToSearchOn search parameter restricts searches to specific attributes:name and genre fields, this query returns only documents with “adventure” in the genre field.Search Facet Values
The newPOST /indexes/{index}/facet-search endpoint searches within facet values (fields defined as filterableAttributes). It supports prefix search and typo tolerance:Sort Facets by Count
Use thesortFacetValuesBy setting to order facet values by frequency. Sort all facets by count:Task Queue Visibility
The/tasks route now includes a total property showing the total number of tasks in the queue. You can filter this count, for example /tasks?statuses=succeeded shows the total number of successfully processed tasks.Improvements
Attribute Ranking Rule Refinement
Theattribute ranking rule now calculates relevance based on how close a matching word is to that word’s position in the query, rather than its absolute distance from the beginning of the attribute. This provides more intuitive ranking when search terms appear at different positions in document fields.Language Support Enhancements
- Improved Japanese word segmentation
- Enhanced separator-based tokenization: words containing underscores (
_) are now properly segmented into separate words, and brackets{()}are no longer treated as context separators for the proximity ranking rule
Performance and Size Improvements
- Reduced index size by approximately 15% through internal database optimization
- Improved deserialization performance
- Re-enabled task autobatching for addition and deletion operations
- Fixed performance issue on
/statsendpoint
Metrics Improvements
The experimental Prometheus/metrics endpoint now provides:- Task queue metrics including number of queued and processing tasks
- Real database size used by Meilisearch
- “meilisearch” prefix on all metrics
lastUpdateandisIndexingfields in/statsendpoint
Web Interface Update
Updated the local search preview web interface and mini-dashboard to version v0.2.11.Other
Case-Sensitive Search Fix
Fixed case-sensitive search issues with camelCase words. Searches fordellonghi now properly match documents containing DeLonghi.Vector and Geo Fixes
- Fixed geo bounding box queries with string coordinates (requires re-indexing documents with
latandlngfields) - Fixed handling of null JSON values in the
_vectorsfield - Fixed panic when using multiple vectors with different dimensions
- Fixed panic when sorting geo fields represented as strings
Filter Improvements
Fixed filter escaping to properly handle the backslash character at the end of filter values.Other Notable Changes
- Fixed highlighting document issues by properly remapping char map when lowercasing strings
- Fixed panic in ranking rule bucket sort algorithm
- Added new
/experimental-featuresendpoint for managing experimental features likescoreDetailsandvectorStore - Fixed document deletion statistics when using filters
New Features
Delete documents by filter
You can now delete documents using filters with the new/documents/delete route:taskUid to check the task status.Get documents by filter
You can now use filters in theGET endpoint of the /documents route:/documents/fetch route to handle complex filters:/documents/fetch route accepts: limit, offset, fields, and filter.Fields must be set as filterable before you can use them as filters.New filter operators: IS EMPTY and IS NULL
Two new filter operators have been added:IS EMPTYmatches existing fields with a valid, but empty valueIS NULLmatches existing fields with an explicitnullvalue
color IS EMPTY matches document 0.color IS NULL matches document 1.Both operators work with the NOT operator: color IS NOT EMPTY and NOT color IS EMPTY match document 1. color IS NOT NULL and NOT color IS NULL match document 0.Neither operator matches documents missing the specified field.Improvements
Search performance and relevancy
The search engine has been significantly refactored to improve performance and relevancy:Performance improvements:- The fastest 75 percent of queries now consistently answer below 50ms
- Single terms are limited to 150 possible typo matches for queries with 1 typo, and 50 for queries with 2 typos
- Both single word and multi-word queries consider a maximum of 50 synonyms
- The total number of words for all synonyms of a single term cannot exceed 100
- Queries can now contain a maximum of 1000 words
- Geo search performance improvements: faster sorting of small document sets, and descending sort is now as performant as ascending sort
- The
exactnessranking rule no longer treats synonyms as exact matches, boosting documents containing the query exactly as typed - Results are always sorted as if the
wordsranking rule has higher priority thanattributes,exactness,typo, andproximityranking rules - Split words are now treated as possible digrams, so
whit ehorsemay matchwhite horse - N-grams and split words are ranked lower than exact words in the
typoranking rule - Ranking rule behavior is now consistent regardless of the number of ranked documents
Automated task deletion
The task queue now has a maximum limit of 1M tasks. When the limit is reached, Meilisearch automatically deletes the oldest 100k tasks (if they are finished). This prevents database issues when the task queue becomes full.A hard limit of 10GiB of tasks has been added. When this is reached, Meilisearch will attempt to delete unfinished tasks automatically before rejecting new tasks.Language support improvements
- Split camelCase in Latin segmenter
- Improved Arabic normalization and segmentation
CSV boolean support
CSV documents now support boolean values.Other improvements
- Add experimental feature to reduce RAM usage
- Improve geosort error messages
- Improve error message when payload is too large
- Improve the
GET /healthroute by ensuring the internal database is accessible
Other
Breaking changes in v1.2.1
After upgrading to v1.2.1, you must re-index your dataset. The easiest way is to create a dump and import it into v1.2.1 when starting Meilisearch. This is necessary due to changes in how document deletion statistics are calculated.Find more information on GitHubNew Features
Multi-index search
Perform searches across multiple indexes in a single HTTP request using the new/multi-search endpoint:facetStats for numerical facets
Queries using thefacets parameter now automatically include a facetStats object containing the minimum and maximum values for each numerical facet:Geosearch with bounding box
Use the new_geoBoundingBox filter to search for results within a specific geographic area:_geoBoundingBox filter accepts two coordinate arrays: the top right corner and the bottom left corner of your search area.Prometheus metrics monitoring (experimental)
An experimental feature for monitoring Meilisearch with Prometheus is now available. Launch Meilisearch with the--experimental-enable-metrics flag to enable it:/metrics endpoint in Prometheus-compatible format. This feature is experimental and its API may change between versions.Improvements
Unlimited indexes and index size
Meilisearch no longer enforces limits on the number of indexes or their individual size. You can now create unlimited indexes, with the maximum size determined only by your operating system’s memory address space (approximately 80TiB under Linux).Customizable CSV delimiters
When adding or updating documents, you can now customize the CSV delimiter using thecsvDelimiter parameter. The default delimiter remains a comma (,).Improved language support
- Enhanced Greek support with diacritics normalization and final sigma handling
- Enhanced Arabic support by ignoring Tatweel characters
- Improved language detection during indexing, reducing incorrect language recognition during search
Better error messages
Meilisearch now provides “did you mean…?” suggestions when you make typos in search parameters, making it easier to identify and correct mistakes.Faster indexing with automatic task batching
Addition and deletion tasks are now automatically batched together to improve indexing performance.API key and tenant token wildcards
Wildcards (*) can now be used at the end of index names when creating API keys or tenant tokens.Enhanced geo field handling
The_geo field now accepts null as a valid value when importing or updating documents.Reduced crate size
The Meilisearch crate size has been significantly reduced from approximately 200MB to 50MB through dictionary compression.Cached index statistics
Index statistics are now cached to improve performance.Other
Database corruption issue in v1.1.0
v1.1.1 disables the auto-batching feature introduced in v1.1.0 due to a critical bug that could corrupt databases. If your database was affected, the only recovery option is to reindex your documents in a fresh index.Task queue overflow protection
Meilisearch now stops receiving new tasks once the task queue reaches capacity, preventing potential issues from task queue overflow.Find more information on GitHubNew Features
Language Support Enhancements
Korean language support has been added to Meilisearch. Chinese language support has been significantly improved with character normalization into Pinyin, optimized segmentation algorithm, and unified character variants handling. Hebrew, Thai, Arabic, and Latin language support has also been enhanced with improved diacritics and non-spacing marks normalization.Improved Primary Key Inference
When documents are added to an index without a specified primary key, Meilisearch now intelligently searches for attributes ending withid (such as puid or _id). If exactly one such attribute is found, it becomes the primary key. If multiple candidates are detected, you must explicitly specify the primary key instead of Meilisearch choosing one automatically. This provides better control and prevents unexpected behavior.Multi-Version Dump Migration
You can now migrate from any old version of Meilisearch that supports dumps directly to the latest version using a single dump file, making upgrades to v1.0.0 smoother and more straightforward.Improvements
Search and Indexing Performance
Memory usage for search requests containing multiple long words has been significantly improved. Theexactness ranking rule now performs much better for search requests with many words. Multi-word synonyms are now translated into phrases during query interpretation, which improves result relevancy and stabilizes search latency, particularly for queries with many multi-word synonyms. The proximity ranking rule performance has been improved for searches ending with short words. Incremental indexing time for the proximity ranking rule has been reduced. Soft-deletion computation has been improved.Configuration and Settings
Settings updates that don’t require reindexing no longer trigger unnecessary reindexing, reducing processing time. The--schedule-snapshot option now accepts an optional integer value specifying the interval in seconds, consolidating snapshot configuration.Error Messages
Error messages have been clarified, particularly when database and engine versions are incompatible, making troubleshooting easier.Installation
Thedownload-latest.sh script now includes support for Apple Silicon binaries.Other
Security Changes
Master keys in production environments must now be at least 16 bytes long. Keys shorter than this will be rejected as a security measure.CLI Configuration Changes
The--max-index-size and --max-task-db configuration options have been removed. These options were not effectively limiting disk space usage. If these limits impact your usage, please reach out to the Meilisearch team.The --disable-auto-batching CLI option and MEILI_DISABLE_AUTO_BATCHING environment variable have been removed. This option was introduced as a temporary workaround and is no longer necessary.The --dumps-dir option has been renamed to --dump-dir for consistency.The --snapshot-interval-sec option has been removed. Use --schedule-snapshot with an optional integer value instead.The --log-level option and MEILI_LOG_LEVEL environment variable now only accept these values: ERROR, WARN, INFO, DEBUG, TRACE, and OFF.Hidden CLI arguments --nb-max-chunks and --log-every-n have been removed.Binary Package Name
When installing Meilisearch withapt, the command is now apt install meilisearch instead of apt install meilisearch-http. To install versions before v1.0.0, use apt install meilisearch-http.Error Code Changes
All task error responses now consistently include anerror field with a JSON-formatted response containing an error code and type. Many error codes have been updated for clarity:Index Operations (POST /indexes, PUT /indexes/:uid, GET /indexes):missing_index_uidreplacesbad_requestwhenuidis missinginvalid_index_primary_keyreplacesbad_requestfor invalidprimaryKeyinvalid_index_limitandinvalid_index_offsetreplacebad_requestfor pagination errors
GET /indexes/:uid/documents, POST /indexes/:uid/documents):invalid_document_fields,invalid_document_limit, andinvalid_document_offsetreplacebad_requestinvalid_geo_fieldreplacesinvalid_document_geo_field- Attempting to update the primary key when adding documents now returns an error
GET /indexes/:uid/search, POST /indexes/:uid/search):invalid_search_q,invalid_search_offset,invalid_search_limit,invalid_search_page,invalid_search_hits_per_pagereplacebad_requestinvalid_search_attributes_to_retrieve,invalid_search_attributes_to_crop,invalid_search_show_matches_positionreplacebad_requestinvalid_search_filterreplacesinvalid_filterinvalid_search_sortreplacesinvalid_sortinvalid_search_facets,invalid_search_highlight_pre_tag,invalid_search_highlight_post_tag,invalid_search_matching_strategyreplacebad_request
POST /indexes/swap-indexes):invalid_swap_duplicate_index_foundreplacesduplicate_index_foundinvalid_swap_indexesreplacesbad_requestwhen swap array doesn’t contain exactly 2 indexesmissing_swap_indexesreplacesmissing_parameterwhenindexesfield is missing
/settings and sub-routes):invalid_settings_displayed_attributes,invalid_settings_searchable_attributes,invalid_settings_filterable_attributes,invalid_settings_sortable_attributesreplacebad_requestinvalid_settings_ranking_rulesreplacesbad_requestinvalid_settings_stop_words,invalid_settings_synonymsreplacebad_requestinvalid_settings_distinct_attributereplacesbad_requestinvalid_settings_typo_tolerancereplacesinvalid_typo_tolerance_min_word_size_for_typosandbad_requestinvalid_settings_faceting,invalid_settings_paginationreplacebad_request
GET /tasks):invalid_task_uidsreplacesinvalid_task_uids_filterinvalid_task_typesreplacesinvalid_task_types_filterinvalid_task_statusesreplacesinvalid_task_statuses_filterinvalid_task_cancel_byreplacesinvalid_task_canceled_by_filterinvalid_task_before_enqueued_at,invalid_task_after_enqueued_at,invalid_task_before_started_at,invalid_task_after_started_at,invalid_task_before_finished_at,invalid_task_after_finished_atreplaceinvalid_task_date_filter
GET /keys, POST /keys, PATCH /keys):invalid_api_key_limit,invalid_api_key_offsetreplacebad_requestmissing_api_key_actions,missing_api_key_indexes,missing_api_key_expire_atreplacemissing_parameterimmutable_api_key_uid,immutable_api_key_actions,immutable_api_key_indexes,immutable_api_key_expires_at,immutable_api_key_created_at,immutable_api_key_updated_atreplaceimmutable_field
no_space_left_on_devicereplacesinternalwhen disk space is exhaustedio_errorreplacesinternalfor I/O errorstoo_many_open_filesreplacesinternalwhen the open files limit is exceeded- All errors of type
systemnow return HTTP status code500
invalid_index_uidinvalid_settings_ranking_rulesinvalid_settings_typo_tolerancewhenoneTypoandtwoTyposare filled but invalid forminWordSizeForTypos