v1.0.0 馃悵
馃帀 馃帀 We are proud to announce the first major release of Meilisearch! 馃帀 馃帀
This new release focuses on stabilizing the CLI instead of only introducing new features. We took this opportunity to introduce final breaking changes to the CLI and make the error handler more intuitive. There will be no breaking changes in future versions until the release of v2.0.0. Please refer to our versioning policy for a definition of what we consider to be a breaking change in Meilisearch.
Despite our focus on stabilizing Meilisearch, we also took the time to improve support for Chinese and Korean!
馃О Most integrations (SDKs, clients, libraries) will be compatible with this version within four hours of the release. Sometimes this can take up to 48 hours, depending on the issues we encounter during the release.
Here is the exhaustive list of integrations not immediately compatible with v1.0.0:
- meilisearch-swift: though you can still use this library with v1.0.0, some new features present in Meilisearch v0.30.0 and later are not yet available. Let us know if you really need it鈥攁nd contributions are always welcome in the related repository!
- meilisearch-java: our team is still working on refactoring the code; this is reaching the end, but the SDK cannot be used with v0.29.0 and later yet. Follow the repository to know when it will be compatible.
New features and improvements 馃敟
Improve language support
- Add support for Korean 馃嚢馃嚪
- Improve support for Chinese:
- Normalize Chinese characters into Pinyin
- Disable the HMM (Hidden Markov Model algorithm) feature in Chinese segmentation
- Unify Chinese characters variants (kvariants, zvariants, semantic variants, etc)
- Enhance Hebrew, Thai, Arabic, and Latin languages support by improving diacritics and non-spacing marks normalization
Done by @ManyTheFish, @dureuill, @choznerol, @crudiedo, @daniel-shuy, @harshalkhachane, @mosuka, @qbx2, @Roms1383, @Sokom141, and @yenwel in #3269 and meilisearch/milli#736 and all the Charabia's PRs listed here.
Indexing and search speed improvements
- Significantly improve the memory usage of search requests containing multiple long words (#3269 and meilisearch/milli#708) @loiclec
- Significantly improve the performance of the
exactnessranking rule for search requests containing many words (#3269 and meilisearch/milli#709) @loiclec - Translate multi-word synonyms into phrases when interpreting a search query. This change improves the relevancy of the results and stabilises the latency of search queries containing many multi-word synonyms, removing a source of denial-of-service attacks. (#3269 and meilisearch/milli#732) @loiclec
- Improve the performance of the
proximityranking rule for search requests ending with short words (#3269 and meilisearch/milli#733) @loiclec - Limit the reindexing caused by updating settings when not needed (meilisearch/milli#706 and #3269) @GregoryConrad
- Reduce incremental indexing time for the proximity ranking rule (#3445 and meilisearch/milli#776) @loiclec
- Improve soft-deletion computation (meilisearch/milli#747) @dureuill
Other improvements
- Using a single dump, you can now migrate from any old version of Meilisearch (supporting the dump feature) to the latest version. We hope to facilitate your migration to v1.0.0 to make it as smooth as possible (#3170) @dureuill
- Improve
download-latest.shscript: integrate apple-silicon binary (#3169) @curquiza - Clarify error message when the DB and engine versions are incompatible (#3279) @dureuill
Breaking changes 鈿狅笍
Since we are releasing v1.0.0, this is the last time we introduce breaking changes until v2.0.0.
New CLI behavior
- As a security measure, Meilisearch will now reject master keys that are less than 16 bytes in production environment (#3274 and #3295) @dureuill
- Remove
--max-index-sizeand--max-task-dbconfiguration options (#3278) @dureuill
These options were not serving their intended purpose of limiting the disk space taken by Meilisearch for the reasons laid out here.
Please reach out if the new limits (described in the previous link) impede your usage. - Remove
--disable-auto-batchingCLI option and the associated environment variableMEILI_DISABLE_AUTO_BATCHING(#3296) @loiclec
This option was initially introduced as a workaround in case of a bug and is no longer useful since the feature has matured. - Rename dump command from
--dumps-dirto--dump-dir(#3175) @dureuill - Remove
--snapshot-interval-sec.--schedule-snapshotnow accepts an optional integer value specifying the interval in seconds (#3281) @dureuill - The
--log-leveloption andMEILI_LOG_LEVELenvironment variable now only accept the following arguments:ERROR,WARN,INFO,DEBUG,TRACEandOFF(#3293) @loiclec - Remove hidden but usable CLI arguments
--nb-max-chunksand--log-every-n(#3305) @Kerollmops
Revamp primary key inference
We have improved the primary key inference process when receiving documents for the first time.
If an index's primary key has not been specified, Meilisearch will attempt to infer the primary key by searching for any attributes ending with id, such as puid or _id.
If only one such attribute is detected, it will be designated as the index's primary key.
If multiple attributes ending with id are detected, Meilisearch will ask you to specify the primary key instead of choosing the first found one.
If no primary key candidates are detected, Meilisearch will throw an error as before.
Done in meilisearch/milli#752 and #3269 by @dureuill
Change the name of the binary when using apt
The command used to install the Meilisearch binary withapt is now apt install meilisearch and not apt install meilisearch-http.
To download the Meilisearch binary released before v1.0, you still need to use apt install meilisearch-http.
Error handler changes
All detailed task responses contain the error field. When a task fails, it is always accompanied by a JSON-formatted error response that contains an error code and type. Many of these codes and types were unclear and have been changed to improve the user experience.
This is a breaking change if you use any of the following codes or types in your code base:
- When calling
POST /indexes/swap-indexes, the following errorcodes have been updated:Click for details
duplicate_index_foundis renamed toinvalid_swap_duplicate_index_found- Sending an array of indexes not containing exactly 2
indexUidsfor a swap operation object now returnsinvalid_swap_indexesinstead of abad_request - If the
indexesfield is missing, Meilisearch now returnsmissing_swap_indexesinstead ofmissing_parameter
- When calling
GET /indexesandGET /indexes/:uid, the following errorcodes have been updated:Click for details
- Sending an invalid
limitparameter now returnsinvalid_index_limitinstead ofbad_request - Sending an invalid
offsetparameter now returnsinvalid_index_offsetinstead ofbad_request
- Sending an invalid
- When calling
POST /indexesandPUT /indexes/:uid, the following errorcodes have been updated:Click for details
- A missing
uidin the payload will returnmissing_index_uidinstead ofbad_request - Sending an invalid
primaryKeynow returnsinvalid_index_primary_keyinstead ofbad_request
- A missing
- When calling
GET /index/:uid/documentsandGET /indexes/:uid/documents/:uid, the following errorcodes have been updated:.Click for details
- Sending an invalid
fieldsparameter now returnsinvalid_document_fieldsinstead ofbad_request - Sending an invalid
limitparameter now returnsinvalid_document_limitinstead ofbad_request - Sending an invalid
offsetparameter now returnsinvalid_document_offsetinstead ofbad_request - When adding documents, trying to update the primary-key now throw an error
- Sending an invalid
- When calling
POST /index/:uid/documentsandPUT /indexes/:uid/documentsClick for details
- Sending an invalid
primaryKeyparameter now returnsinvalid_index_primary_keyinstead ofbad_request invalid_document_geo_fieldis renamed toinvalid_geo_field
- Sending an invalid
- When calling
GET /index/:uid/searchandPOST /indexes/:uid/search, the following errorcodes have been updated:Click for details
- Sending an invalid
qparameter now returnsinvalid_search_qinstead ofbad_request - Sending an invalid
offsetparameter now returnsinvalid_search_offsetinstead ofbad_request - Sending an invalid
limitparameter now returnsinvalid_search_limitinstead ofbad_request - Sending an invalid
pageparameter now returnsinvalid_search_pageinstead ofbad_request - Sending an invalid
hits_per_pageparameter now returnsinvalid_search_hits_per_pageinstead ofbad_request - Sending an invalid
attributesToRetrieveparameter now returnsinvalid_search_attributes_to_retrieveinstead ofbad_request - Sending an invalid
attributesToCropparameter now returnsinvalid_search_attributes_to_cropinstead ofbad_request - Sending an invalid
showMatchesPositionparameter now returnsinvalid_search_show_matches_positioninstead ofbad_request - Sending an invalid
filterparameter now returnsinvalid_search_filterinstead ofinvalid_filter - Sending an invalid
sortparameter now returnsinvalid_search_sortinstead ofinvalid_sort - Sending an invalid
facetsparameter now returnsinvalid_search_facetsinstead ofbad_request - Sending an invalid
highlightPreTagparameter now returnsinvalid_search_highlight_pre_taginstead ofbad_request - Sending an invalid
highlightPostTagparameter now returnsinvalid_search_highlight_post_taginstead ofbad_request - Sending an invalid
matchingStrategyparameter now returnsinvalid_search_matching_strategyinstead ofbad_request
- Sending an invalid
- When calling any
/settingsroutes and their sub-routes, the following errorcodes have been updated:Click for details
- Sending an invalid value for the
displayedAttributessetting now returnsinvalid_settings_displayed_attributesinstead ofbad_request - Sending an invalid value for the
searchableAttributessetting now returnsinvalid_settings_searchable_attributesinstead ofbad_request - Sending an invalid value for the
filterableAttributessetting now returnsinvalid_settings_filterable_attributesinstead ofbad_request - Sending an invalid value for the
sortableAttributessetting now returnsinvalid_settings_sortable_attributesinstead ofbad_request - Sending an invalid value for the
rankingRulessetting now returnsinvalid_settings_ranking_rulesinstead ofbad_request - Sending an invalid value for the
stopWordssetting now returnsinvalid_settings_stop_wordsinstead ofbad_request - Sending an invalid value for the
synonymssetting now returnsinvalid_settings_synonymsinstead ofbad_request - Sending an invalid value for the
distinctAttributesetting now returnsinvalid_settings_distinct_attributeinstead ofbad_request - Sending an invalid value for the
typoTolerancesetting now returnsinvalid_settings_typo_toleranceinstead ofbad_request invalid_settings_typo_tolerancereplacesinvalid_typo_tolerance_min_word_size_for_typos- Sending an invalid value for the
facetingsetting now returnsinvalid_settings_facetinginstead ofbad_request - Sending an invalid value for the
paginationsetting now returnsinvalid_settings_paginationinstead ofbad_request
- Sending an invalid value for the
- When calling any
/tasksroutes, the following errorcodes have been updated:Click for details
- Sending an invalid
offsetparameter now returnsinvalid_search_offsetinstead ofbad_request - Sending an invalid
limitparameter now returnsinvalid_search_limitinstead ofbad_request - Sending an invalid
uidsparameter now returnsinvalid_task_uidsinstead ofinvalid_task_uids_filter - Sending an invalid
typesparameter now returnsinvalid_task_typesinstead ofinvalid_task_types_filter - Sending an invalid
statusesparameter now returnsinvalid_task_statusesinstead ofinvalid_task_statuses_filter - Sending an invalid
cancelByparameter now returnsinvalid_task_cancel_byinstead ofinvalid_task_canceled_by_filter - Sending an invalid
beforeEnqueuedAtparameter now returnsinvalid_task_before_enqueued_atinstead ofinvalid_task_date_filter - Sending an invalid
afterEnqueuedAtparameter now returnsinvalid_task_after_enqueued_atinstead ofinvalid_task_date_filter - Sending an invalid
beforeStartedAtparameter now returnsinvalid_task_before_started_atinstead ofinvalid_task_date_filter - Sending an invalid
afterStartedAtparameter now returnsinvalid_task_after_started_atinstead ofinvalid_task_date_filter - Sending an invalid
beforeFinishedAtparameter now returnsinvalid_task_before_finished_atinstead ofinvalid_task_date_filter - Sending an invalid
afterFinishedAtparameter now returnsinvalid_task_after_finished_atinstead ofinvalid_task_date_filter
- Sending an invalid
- When calling
GET /keysandGET /keys/:uid, the following errorcodes have been updated:Click for details
- Sending an invalid
limitparameter now returnsinvalid_api_key_limitinstead ofbad_request - Sending an invalid
offsetparameter now returnsinvalid_api_key_offsetinstead ofbad_request
- Sending an invalid
- When calling
POST /keys, the following errorcodes have been updated:Click for details
- If the
actionsfield is missing, Meilisearch now returnsmissing_api_key_actionsinstead ofmissing_parameter - If the
indexesfield is missing, Meilisearch now returnsmissing_api_key_indexesinstead ofmissing_parameter - If the
expiresAtfield is missing, Meilisearch now returnsmissing_api_key_expire_atinstead ofmissing_parameter
- If the
- When calling
PATCH /keys, the following errorcodes have been updated:Click for details
- Updating the
uidfield now returnsimmutable_api_key_uidinstead ofimmutable_field - Updating the
actionsfield now returnsimmutable_api_key_actionsinstead ofimmutable_field - Updating the
indexesfield now returnsimmutable_api_key_indexesinstead ofimmutable_field - Updating the
expiresAtfield now returnsimmutable_api_key_expires_atinstead ofimmutable_field - Updating the
createdAtfield now returnsimmutable_api_key_created_atinstead ofimmutable_field - Updating the
updatedAtfield now returnsimmutable_api_key_updated_atinstead ofimmutable_field
- Updating the
- When Meilisearch does not have enough space
- the
no_space_left_on_devicecode replacesinternal systemtype replacesinternal
- the
- When Meilisearch throws an I/O error
- the
io_errorcode replacesinternal systemtype replacesinternal
- the
- When your machines exceeds the maximum number allowed for open files, Meilisearch returns
- the
too_many_open_filescode instead ofinternal systemtype instead ofinternal
- the
- All Meilisearch errors of type
systemreturn the HTTP error code500(#3321) @irevoire - The following errors are now returned synchronously:
invalid_index_uidinvalid_settings_ranking_rulesinvalid_settings_typo_toleranceifoneTypoandtwoTyposare filled (forminWordSizeForTypos) but are invalid
Done by @irevoire and @loiclec in #3316, #3263, #3329, #3334, #3412 and #3339
Fixes 馃悶
- Commit SHA and date are now present in the Meilisearch logs when launching Meilisearch from a Docker image (#3212) @brunoocasali
- Fix
MDB_PAGE_FULLinternal error that would sometimes occur when inserting documents on macOS (#3210) @Kerollmops - Re-introduce the
no_space_left_on_deviceerror (#3263) @irevoire - Index creation and update dates are now kept when using a dump (#3245) @amab8901
- Fix the usage of
*for thetasksroutes. More information on this issue (#3339) @loiclec - Fix
/tasks/cancelbehavior when sending an invalidcanceledByparameter (#3375) @Kerollmops - Fix dumps import for Windows, see this issue for more information.
- Return an error when a
_geofield contains one extra unspecified field (#3415 meilisearch/milli#772) @irevoire - Fix error message when
latandlngare unparseable (#3415 meilisearch/milli#763) @ahlner - Fix the
databaseSizevalue of the/statsroute (#3418) @irevoire
Misc
The following changes do not impact user experience.
- GitHub CIs
- Replace deprecated set-output in GitHub actions (#3015) @funilrys
- Use ubuntu-latest when not impacting (#3183) @curquiza
- Add CI to push a
latestgit tag for every stable Meilisearch release (#3172 and #3207) @curquiza - Add
workflow_dispatchto flaky.yml (#3041) @curquiza - Add a dispatch to the publish binaries workflow (#3100) @curquiza
- Remove macos-latest and windows-latest usages (#3264) @curquiza
- Add a nightly CI: create a
nightlyDocker tag every day based on the latest commit onmain(#3229 and #3247) @curquiza - Use ubuntu-18.04 container instead of GitHub hosted actions (#3261) @curquiza
- Test suite
- Re-enable dump tests (#3119) @irevoire
- Re-enable dump test on dates (#3188) @irevoire
- Stop snapshotting the version of Meilisearch in the dump test (#3208) @irevoire
- Update insta snap tests for index dates of dump v5 (#3302) @loiclec
- Add a test on finite pagination placeholder search when distinct is enabled (#3251) @ManyTheFish
- Dependencies
- Fix update-cargo-toml-version.yml (#3224) @mohitsaxenaknoldus
- Update CI dependencies (#3179, #3181 and #3180)
- Update some
cargo_tomldependency (#3128) @colbsmcdolbs - Update mini-dashboard to v0.2.5 (#3186, and #3322) @mdubus
- Documentation
- Update README to reference Meilisearch Cloud (#3221) @davelarkan
- Replace Slack link with Discord in README.md (#3234 and #3276) @tpayet @shivaylamba
- Internal changes
- Implement Uuid codec for heed (#3001) @elbertronnie
- Improve how we receive the documents payload (#3164 and #3266) @jiangbo212
- Improve clarity of the code that receives payloads (#3236) @Kerollmops
- Extract the dates out of the dumpv4 (#3012 and #3190) @funilrys @irevoire
- Rename meilisearch-http (#3112) @colbsmcdolbs
鉂わ笍 Thanks again to our external contributors: