New 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