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
exactness
ranking 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
proximity
ranking 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.sh
script: 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-size
and--max-task-db
configuration 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-batching
CLI 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-dir
to--dump-dir
(#3175) @dureuill - Remove
--snapshot-interval-sec
.--schedule-snapshot
now accepts an optional integer value specifying the interval in seconds (#3281) @dureuill - The
--log-level
option andMEILI_LOG_LEVEL
environment variable now only accept the following arguments:ERROR
,WARN
,INFO
,DEBUG
,TRACE
andOFF
(#3293) @loiclec - Remove hidden but usable CLI arguments
--nb-max-chunks
and--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 code
s and type
s were unclear and have been changed to improve the user experience.
This is a breaking change if you use any of the following code
s or type
s in your code base:
- When calling
POST /indexes/swap-indexes
, the following errorcode
s have been updated:Click for details
duplicate_index_found
is renamed toinvalid_swap_duplicate_index_found
- Sending an array of indexes not containing exactly 2
indexUids
for a swap operation object now returnsinvalid_swap_indexes
instead of abad_request
- If the
indexes
field is missing, Meilisearch now returnsmissing_swap_indexes
instead ofmissing_parameter
- When calling
GET /indexes
andGET /indexes/:uid
, the following errorcode
s have been updated:Click for details
- Sending an invalid
limit
parameter now returnsinvalid_index_limit
instead ofbad_request
- Sending an invalid
offset
parameter now returnsinvalid_index_offset
instead ofbad_request
- Sending an invalid
- When calling
POST /indexes
andPUT /indexes/:uid
, the following errorcode
s have been updated:Click for details
- A missing
uid
in the payload will returnmissing_index_uid
instead ofbad_request
- Sending an invalid
primaryKey
now returnsinvalid_index_primary_key
instead ofbad_request
- A missing
- When calling
GET /index/:uid/documents
andGET /indexes/:uid/documents/:uid
, the following errorcode
s have been updated:.Click for details
- Sending an invalid
fields
parameter now returnsinvalid_document_fields
instead ofbad_request
- Sending an invalid
limit
parameter now returnsinvalid_document_limit
instead ofbad_request
- Sending an invalid
offset
parameter now returnsinvalid_document_offset
instead ofbad_request
- When adding documents, trying to update the primary-key now throw an error
- Sending an invalid
- When calling
POST /index/:uid/documents
andPUT /indexes/:uid/documents
Click for details
- Sending an invalid
primaryKey
parameter now returnsinvalid_index_primary_key
instead ofbad_request
invalid_document_geo_field
is renamed toinvalid_geo_field
- Sending an invalid
- When calling
GET /index/:uid/search
andPOST /indexes/:uid/search
, the following errorcode
s have been updated:Click for details
- Sending an invalid
q
parameter now returnsinvalid_search_q
instead ofbad_request
- Sending an invalid
offset
parameter now returnsinvalid_search_offset
instead ofbad_request
- Sending an invalid
limit
parameter now returnsinvalid_search_limit
instead ofbad_request
- Sending an invalid
page
parameter now returnsinvalid_search_page
instead ofbad_request
- Sending an invalid
hits_per_page
parameter now returnsinvalid_search_hits_per_page
instead ofbad_request
- Sending an invalid
attributesToRetrieve
parameter now returnsinvalid_search_attributes_to_retrieve
instead ofbad_request
- Sending an invalid
attributesToCrop
parameter now returnsinvalid_search_attributes_to_crop
instead ofbad_request
- Sending an invalid
showMatchesPosition
parameter now returnsinvalid_search_show_matches_position
instead ofbad_request
- Sending an invalid
filter
parameter now returnsinvalid_search_filter
instead ofinvalid_filter
- Sending an invalid
sort
parameter now returnsinvalid_search_sort
instead ofinvalid_sort
- Sending an invalid
facets
parameter now returnsinvalid_search_facets
instead ofbad_request
- Sending an invalid
highlightPreTag
parameter now returnsinvalid_search_highlight_pre_tag
instead ofbad_request
- Sending an invalid
highlightPostTag
parameter now returnsinvalid_search_highlight_post_tag
instead ofbad_request
- Sending an invalid
matchingStrategy
parameter now returnsinvalid_search_matching_strategy
instead ofbad_request
- Sending an invalid
- When calling any
/settings
routes and their sub-routes, the following errorcode
s have been updated:Click for details
- Sending an invalid value for the
displayedAttributes
setting now returnsinvalid_settings_displayed_attributes
instead ofbad_request
- Sending an invalid value for the
searchableAttributes
setting now returnsinvalid_settings_searchable_attributes
instead ofbad_request
- Sending an invalid value for the
filterableAttributes
setting now returnsinvalid_settings_filterable_attributes
instead ofbad_request
- Sending an invalid value for the
sortableAttributes
setting now returnsinvalid_settings_sortable_attributes
instead ofbad_request
- Sending an invalid value for the
rankingRules
setting now returnsinvalid_settings_ranking_rules
instead ofbad_request
- Sending an invalid value for the
stopWords
setting now returnsinvalid_settings_stop_words
instead ofbad_request
- Sending an invalid value for the
synonyms
setting now returnsinvalid_settings_synonyms
instead ofbad_request
- Sending an invalid value for the
distinctAttribute
setting now returnsinvalid_settings_distinct_attribute
instead ofbad_request
- Sending an invalid value for the
typoTolerance
setting now returnsinvalid_settings_typo_tolerance
instead ofbad_request
invalid_settings_typo_tolerance
replacesinvalid_typo_tolerance_min_word_size_for_typos
- Sending an invalid value for the
faceting
setting now returnsinvalid_settings_faceting
instead ofbad_request
- Sending an invalid value for the
pagination
setting now returnsinvalid_settings_pagination
instead ofbad_request
- Sending an invalid value for the
- When calling any
/tasks
routes, the following errorcode
s have been updated:Click for details
- Sending an invalid
offset
parameter now returnsinvalid_search_offset
instead ofbad_request
- Sending an invalid
limit
parameter now returnsinvalid_search_limit
instead ofbad_request
- Sending an invalid
uids
parameter now returnsinvalid_task_uids
instead ofinvalid_task_uids_filter
- Sending an invalid
types
parameter now returnsinvalid_task_types
instead ofinvalid_task_types_filter
- Sending an invalid
statuses
parameter now returnsinvalid_task_statuses
instead ofinvalid_task_statuses_filter
- Sending an invalid
cancelBy
parameter now returnsinvalid_task_cancel_by
instead ofinvalid_task_canceled_by_filter
- Sending an invalid
beforeEnqueuedAt
parameter now returnsinvalid_task_before_enqueued_at
instead ofinvalid_task_date_filter
- Sending an invalid
afterEnqueuedAt
parameter now returnsinvalid_task_after_enqueued_at
instead ofinvalid_task_date_filter
- Sending an invalid
beforeStartedAt
parameter now returnsinvalid_task_before_started_at
instead ofinvalid_task_date_filter
- Sending an invalid
afterStartedAt
parameter now returnsinvalid_task_after_started_at
instead ofinvalid_task_date_filter
- Sending an invalid
beforeFinishedAt
parameter now returnsinvalid_task_before_finished_at
instead ofinvalid_task_date_filter
- Sending an invalid
afterFinishedAt
parameter now returnsinvalid_task_after_finished_at
instead ofinvalid_task_date_filter
- Sending an invalid
- When calling
GET /keys
andGET /keys/:uid
, the following errorcode
s have been updated:Click for details
- Sending an invalid
limit
parameter now returnsinvalid_api_key_limit
instead ofbad_request
- Sending an invalid
offset
parameter now returnsinvalid_api_key_offset
instead ofbad_request
- Sending an invalid
- When calling
POST /keys
, the following errorcode
s have been updated:Click for details
- If the
actions
field is missing, Meilisearch now returnsmissing_api_key_actions
instead ofmissing_parameter
- If the
indexes
field is missing, Meilisearch now returnsmissing_api_key_indexes
instead ofmissing_parameter
- If the
expiresAt
field is missing, Meilisearch now returnsmissing_api_key_expire_at
instead ofmissing_parameter
- If the
- When calling
PATCH /keys
, the following errorcode
s have been updated:Click for details
- Updating the
uid
field now returnsimmutable_api_key_uid
instead ofimmutable_field
- Updating the
actions
field now returnsimmutable_api_key_actions
instead ofimmutable_field
- Updating the
indexes
field now returnsimmutable_api_key_indexes
instead ofimmutable_field
- Updating the
expiresAt
field now returnsimmutable_api_key_expires_at
instead ofimmutable_field
- Updating the
createdAt
field now returnsimmutable_api_key_created_at
instead ofimmutable_field
- Updating the
updatedAt
field now returnsimmutable_api_key_updated_at
instead ofimmutable_field
- Updating the
- When Meilisearch does not have enough space
- the
no_space_left_on_device
code replacesinternal
system
type replacesinternal
- the
- When Meilisearch throws an I/O error
- the
io_error
code replacesinternal
system
type replacesinternal
- the
- When your machines exceeds the maximum number allowed for open files, Meilisearch returns
- the
too_many_open_files
code instead ofinternal
system
type instead ofinternal
- the
- All Meilisearch errors of type
system
return the HTTP error code500
(#3321) @irevoire - The following errors are now returned synchronously:
invalid_index_uid
invalid_settings_ranking_rules
invalid_settings_typo_tolerance
ifoneTypo
andtwoTypos
are 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_FULL
internal error that would sometimes occur when inserting documents on macOS (#3210) @Kerollmops - Re-introduce the
no_space_left_on_device
error (#3263) @irevoire - Index creation and update dates are now kept when using a dump (#3245) @amab8901
- Fix the usage of
*
for thetasks
routes. More information on this issue (#3339) @loiclec - Fix
/tasks/cancel
behavior when sending an invalidcanceledBy
parameter (#3375) @Kerollmops - Fix dumps import for Windows, see this issue for more information.
- Return an error when a
_geo
field contains one extra unspecified field (#3415 meilisearch/milli#772) @irevoire - Fix error message when
lat
andlng
are unparseable (#3415 meilisearch/milli#763) @ahlner - Fix the
databaseSize
value of the/stats
route (#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
latest
git tag for every stable Meilisearch release (#3172 and #3207) @curquiza - Add
workflow_dispatch
to 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
nightly
Docker 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_toml
dependency (#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: