github meilisearch/meilisearch v1.0.0-rc.0
v1.0.0-rc.0 🐝

latest releases: prototype-edit-documents-with-rhai-3, prototype-edit-documents-with-rhai-2, prototype-edit-documents-with-rhai-1...
pre-release16 months ago

⚠️ Since this is a release candidate (RC), we do NOT recommend using it in a production environment. Is something not working as expected? We welcome bug reports and feedback about new features.

We are proud to announce the first major release of Meilisearch is coming! 🎉

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!

📖 Meilisearch's official documentation will be ready for the official v1.0.0 release. Meanwhile, work-in-progress documentation is available here.

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
  • Improve Thai language support

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

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 variable MEILI_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 and MEILI_LOG_LEVEL environment variable now only accept the following arguments: ERROR, WARN, INFO, DEBUG, TRACE and OFF (#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

Error handler changes

All detailed task responses contain 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, some error codes have been changed.
    Click for details
    • duplicate_index_found is renamed to invalid_swap_duplicate_index_found
    • Sending an array of indexes not containing exactly 2 indexUids for a swap operation object now returns invalid_swap_indexes instead of a bad_request
  • When calling GET /indexes and GET /indexes/:uid, some error codes have been changed.
    Click for details
    • Incorrect use of the limit parameter now returns invalid_index_limit instead of bad_request
    • Incorrect use of the offset parameter now returns invalid_index_offset instead of bad_request
  • When calling POST /indexes and PUT /indexes/:uid, some error codes have been changed.
    Click for details
    • A missing uid in the payload will return missing_index_uid instead of bad_request
    • Sending a value with a other type than string or null for primaryKey now returns invalid_index_primary_key instead of bad_request
  • When calling GET /index/:uid/documents and GET /indexes/:uid/documents/:uid, some error codes have been changed.
    Click for details
    • Incorrect use of the fields parameter now returns invalid_document_fields instead of bad_request
    • Incorrect use of the limit parameter now returns invalid_document_limit instead of bad_request
    • Incorrect use of the offset parameter now returns invalid_document_offset instead of bad_request
  • When calling POST /index/:uid/documents and PUT /indexes/:uid/documents
    Click for details
    • Incorrect use of the primaryKey parameter now returns invalid_index_primary_key instead of bad_request
    • invalid_document_geo_field has been renamed to invalid_geo_field
  • When calling GET /index/:uid/search and POST /indexes/:uid/search, some error codes have been changed.
    Click for details
    • Incorrect use of the q parameter now returns invalid_search_q instead of bad_request
    • Incorrect use of the offset parameter now returns invalid_search_offset instead of bad_request
    • Incorrect use of the limit parameter now returns invalid_search_limit instead of bad_request
    • Incorrect use of the page parameter now returns invalid_search_page instead of bad_request
    • Incorrect use of the hits_per_page parameter now returns invalid_search_hits_per_page instead of bad_request
    • Incorrect use of the attributesToRetrieve parameter now returns invalid_search_attributes_to_retrieve instead of bad_request
    • Incorrect use of the attributesToCrop parameter now returns invalid_search_attributes_to_crop instead of bad_request
    • Incorrect use of the showMatchesPosition parameter now returns invalid_search_show_matches_position instead of bad_request
    • Incorrect use of the filter parameter now returns invalid_search_filter instead of bad_request
    • Incorrect use of the sort parameter now returns invalid_search_sort instead of bad_request
    • Incorrect use of the facets parameter now returns invalid_search_facets instead of bad_request
    • Incorrect use of the highlightPreTag parameter now returns invalid_search_highlight_pre_tag instead of bad_request
    • Incorrect use of the highlightPostTag parameter now returns invalid_search_highlight_post_tag instead of bad_request
    • Incorrect use of the matchingStrategy parameter now returns invalid_search_matching_strategy instead of bad_request
  • When calling any /settings routes and their sub-routes, some error codes have been changed.
    Click for details
    • Incorrect use of the displayedAttributes setting now returns invalid_settings_displayed_attributes instead of bad_request
    • Incorrect use of the searchableAttributes setting now returns invalid_settings_searchable_attributes instead of bad_request
    • Incorrect use of the filterableAttributes setting now returns invalid_settings_filterable_attributes instead of bad_request
    • Incorrect use of the sortableAttributes setting now returns invalid_settings_sortable_attributes instead of bad_request
    • Incorrect use of the rankingRules setting now returns invalid_settings_ranking_rules instead of bad_request
    • Incorrect use of the stopWords setting now returns invalid_settings_stop_words instead of bad_request
    • Incorrect use of the synonyms setting now returns invalid_settings_synonyms instead of bad_request
    • Incorrect use of the distinctAttribute setting now returns invalid_settings_distinct_attribute instead of bad_request
    • Incorrect use of the typoTolerance setting now returns invalid_settings_typo_tolerance instead of bad_request
    • invalid_typo_tolerance_min_word_size_for_typos is not returned anymore and invalid_settings_typo_tolerance is returned instead
    • Incorrect use of the faceting setting now returns invalid_settings_faceting instead of bad_request
    • Incorrect use of the pagination setting now returns invalid_settings_pagination instead of bad_request
  • When calling any /tasks routes, some error codes have been changed.
    Click for details
    • Incorrect use of the offset parameter now returns invalid_search_offset instead of bad_request
    • Incorrect use of the limit parameter now returns invalid_search_limit instead of bad_request
    • Incorrect use of the uids parameter now returns invalid_task_uids instead of invalid_task_uids_filter
    • Incorrect use of the types parameter now returns invalid_task_types instead of invalid_task_types_filter
    • Incorrect use of the statuses parameter now returns invalid_task_statuses instead of invalid_task_statuses_filter
    • Incorrect use of the cancelBy parameter now returns invalid_task_cancel_by instead of invalid_task_canceled_by_filter
    • Incorrect use of the beforeEnqueuedAt parameter now returns invalid_task_before_enqueued_at instead of invalid_task_date_filter
    • Incorrect use of the afterEnqueuedAt parameter now returns invalid_task_after_enqueued_at instead of invalid_task_date_filter
    • Incorrect use of the beforeStartedAt parameter now returns invalid_task_before_started_at instead of invalid_task_date_filter
    • Incorrect use of the afterStartedAt parameter now returns invalid_task_after_started_at instead of invalid_task_date_filter
    • Incorrect use of the beforeFinishedAt parameter now returns invalid_task_before_finished_at instead of invalid_task_date_filter
    • Incorrect use of the afterFinishedAt parameter now returns invalid_task_after_finished_at instead of invalid_task_date_filter
  • When calling GET /keys and GET /keys/:uid, some error codes have been changed.
    Click for details
    • Incorrect use of the limit parameter now returns invalid_api_key_limit instead of bad_request
    • Incorrect use of the offset parameter now returns invalid_api_key_offset instead of bad_request
  • When calling POST /keys, some error codes have been changed.
    Click for details
    • If the actions field is missing, Meilisearch now returns missing_api_key_actionsmissing_parameter
    • If the indexes field is missing, Meilisearch now returns missing_api_key_indexesmissing_parameter
    • If the expiresAt field is missing, Meilisearch now returns missing_api_key_expire_atmissing_parameter
  • When Meilisearch does not have enough space
    • the no_space_left_on_device code replaces internal
    • system type replaces internal
  • When Meilisearch throws an I/O error
    • the io_error code replaces internal
    • system type replaces internal
  • When your machines exceeds the maximum number allowed for open files, Meilisearch returns
    • too_many_open_files instead of internal as a code
    • system instead of internal as a type

Done by @irevoire in #3316 and #3263

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 documentation link when returning errors (#3288) @loiclec

Misc

The following changes do not impact user experience.

❤️ Thanks again to our external contributors:

Don't miss a new meilisearch release

NewReleases is sending notifications on new releases.