From b3b2957366e619c6cd1a151e8a5677a4b4a96cbe Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Mon, 12 May 2025 18:58:21 -0300 Subject: [PATCH 01/13] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 804b24d6d..0ff347d2d 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.14.0", + "version": "1.15.0", "homepage": "https://meilisearch.com/docs", "license": "MIT", "repository": "meilisearch/documentation", From cfaf10759fa3a583a33357e796bad3cffcc63860 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Mon, 19 May 2025 16:21:18 -0300 Subject: [PATCH 02/13] update UI with new release version --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index eccfd6783..e39e1e608 100644 --- a/docs.json +++ b/docs.json @@ -143,7 +143,7 @@ "navigation": { "versions": [ { - "version": "v1.14", + "version": "v1.15", "anchors": [ { "anchor": "Learn", From 4f76232377a2fa81195c83462043f34d70f70ce9 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Mon, 19 May 2025 16:22:12 -0300 Subject: [PATCH 03/13] update package lock file --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18aebaac6..a389d123f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "documentation", - "version": "1.14.0", + "version": "1.15.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "version": "1.14.0", + "version": "1.15.0", "license": "MIT", "dependencies": { "js-yaml": "^4.1.0", From 9e6fe75fd9a993d56b85aa0aefeeba7f05a017e8 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 20 May 2025 15:38:20 -0300 Subject: [PATCH 04/13] Bump Docker version (#3262) --- guides/docker.mdx | 16 ++++++++-------- .../self_hosted/install_meilisearch_locally.mdx | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/guides/docker.mdx b/guides/docker.mdx index 822da14af..410bce2a4 100644 --- a/guides/docker.mdx +++ b/guides/docker.mdx @@ -12,7 +12,7 @@ Docker is a tool that bundles applications into containers. Docker containers en Docker containers are distributed in images. To use Meilisearch, use the `docker pull` command to download a Meilisearch image: ```sh -docker pull getmeili/meilisearch:v1.14 +docker pull getmeili/meilisearch:v1.15 ``` Meilisearch deploys a new Docker image with every release of the engine. Each image is tagged with the corresponding Meilisearch version, indicated in the above example by the text following the `:` symbol. You can see [the full list of available Meilisearch Docker images](https://hub.docker.com/r/getmeili/meilisearch/tags#!) on Docker Hub. @@ -29,7 +29,7 @@ After completing the previous step, use `docker run` to launch the Meilisearch i docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 + getmeili/meilisearch:v1.15 ``` ### Configure Meilisearch @@ -45,7 +45,7 @@ docker run -it --rm \ -p 7700:7700 \ -e MEILI_MASTER_KEY='MASTER_KEY'\ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 + getmeili/meilisearch:v1.15 ``` #### Passing instance options with CLI arguments @@ -56,7 +56,7 @@ If you want to pass command-line arguments to Meilisearch with Docker, you must docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 \ + getmeili/meilisearch:v1.15 \ meilisearch --master-key="MASTER_KEY" ``` @@ -74,7 +74,7 @@ To keep your data intact between reboots, specify a dedicated volume by running docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 + getmeili/meilisearch:v1.15 ``` The example above uses `$(pwd)/meili_data`, which is a directory in the host machine. Depending on your OS, mounting volumes from the host to the container might result in performance loss and is only recommended when developing your application. @@ -89,7 +89,7 @@ To import a dump, use Meilisearch's `--import-dump` command-line option and spec docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 \ + getmeili/meilisearch:v1.15 \ meilisearch --import-dump /meili_data/dumps/20200813-042312213.dump ``` @@ -109,7 +109,7 @@ To generate a Meilisearch snapshot with Docker, launch Meilisearch with `--sched docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 \ + getmeili/meilisearch:v1.15 \ meilisearch --schedule-snapshot --snapshot-dir /meili_data/snapshots ``` @@ -121,7 +121,7 @@ To import a snapshot, launch Meilisearch with the `--import-snapshot` option: docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 \ + getmeili/meilisearch:v1.15 \ meilisearch --import-snapshot /meili_data/snapshots/data.ms.snapshot ``` diff --git a/learn/self_hosted/install_meilisearch_locally.mdx b/learn/self_hosted/install_meilisearch_locally.mdx index e5192d716..ea7819ab8 100644 --- a/learn/self_hosted/install_meilisearch_locally.mdx +++ b/learn/self_hosted/install_meilisearch_locally.mdx @@ -53,14 +53,14 @@ These commands launch the **latest stable release** of Meilisearch. ```bash # Fetch the latest version of Meilisearch image from DockerHub -docker pull getmeili/meilisearch:v1.14 +docker pull getmeili/meilisearch:v1.15 # Launch Meilisearch in development mode with a master key docker run -it --rm \ -p 7700:7700 \ -e MEILI_ENV='development' \ -v $(pwd)/meili_data:/meili_data \ - getmeili/meilisearch:v1.14 + getmeili/meilisearch:v1.15 # Use ${pwd} instead of $(pwd) in PowerShell ``` From bb5fc718c838d314bb39bae4df39883c8f939d15 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 15:49:55 +0200 Subject: [PATCH 05/13] v1.15: String comparison filter (#3256) --- .../filter_expression_reference.mdx | 8 ++++- .../working_with_dates.mdx | 36 +++---------------- 2 files changed, 11 insertions(+), 33 deletions(-) diff --git a/learn/filtering_and_sorting/filter_expression_reference.mdx b/learn/filtering_and_sorting/filter_expression_reference.mdx index 22476540f..bcd3757e5 100644 --- a/learn/filtering_and_sorting/filter_expression_reference.mdx +++ b/learn/filtering_and_sorting/filter_expression_reference.mdx @@ -69,7 +69,7 @@ genres != action ### Comparison (`>`, `<`, `>=`, `<=`) -The comparison operators (`>`, `<`, `>=`, `<=`) select documents satisfying a comparison. Comparison operators only apply only to numerical values. +The comparison operators (`>`, `<`, `>=`, `<=`) select documents satisfying a comparison. Comparison operators apply to both numerical and string values. The expression below returns all documents with a user rating above 85: @@ -77,6 +77,12 @@ The expression below returns all documents with a user rating above 85: rating.users > 85 ``` +String comparisons resolve in lexicographic order: symbols followed by numbers followed by letters in alphabetic order. The expression below returns all documents released after the first day of 2004: + +``` +release_date > 2004-01-01 +``` + ### `TO` `TO` is equivalent to `>= AND <=`. The following expression returns all documents with a rating of 80 or above but below 90: diff --git a/learn/filtering_and_sorting/working_with_dates.mdx b/learn/filtering_and_sorting/working_with_dates.mdx index bc55b1942..9acb615fd 100644 --- a/learn/filtering_and_sorting/working_with_dates.mdx +++ b/learn/filtering_and_sorting/working_with_dates.mdx @@ -14,7 +14,7 @@ In this guide, you will learn about Meilisearch's approach to date and time valu ## Preparing your documents -To filter and sort search results chronologically, your documents must have at least one numeric field containing a [UNIX timestamp](https://kb.narrative.io/what-is-unix-time). +To filter and sort search results chronologically, your documents must have at least one field containing a [UNIX timestamp](https://kb.narrative.io/what-is-unix-time). You may also use a string with a date in a format that can be sorted lexicographically, such as `"2025-01-13"`. As an example, consider a database of video games. In this dataset, the release year is formatted as a timestamp: @@ -41,39 +41,11 @@ As an example, consider a database of video games. In this dataset, the release ] ``` -If your date field is expressed in a format other than a numeric timestamp, like [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html), you must convert it before indexing it with Meilisearch. - -Most programming languages have built-in tools to help you with this process. The JavaScript example below converts a game's release date, `"2018-10-18"`, to a numeric timestamp: - -```js -let game = { - "id": 0, - "title": "Return of the Obra Dinn", - "genre": "adventure", - "release_date": "2018-10-18T00:00Z" -}; - -const timestampInMilliseconds = Date.parse(game.release_date); // Date.parse returns the timestamp in milliseconds -const timestamp = timestampInMilliseconds / 1000; // UNIX timestamps must be in seconds - -game = { - "id": 0, - "title": "Return of the Obra Dinn", - "genre": "adventure", - "release_date": "2018-10-18T00:00Z", - "release_timestamp": timestamp -}; -``` - - -When preparing your dataset, it can be useful to leave the original date and time fields in your documents intact. In the example above, we keep the `release_date` field because it is more readable than the raw `release_timestamp`. - - -After adding a numeric timestamp to all documents, [index your data](/reference/api/documents#add-or-replace-documents) as usual. The example below adds a videogame dataset to a `games` index: +Once all documents in your dataset have a date field, [index your data](/reference/api/documents#add-or-replace-documents) as usual. The example below adds a videogame dataset to a `games` index: -## Filtering by timestamp +## Filtering by date To filter search results based on their timestamp, add your document's timestamp field to the list of [`filterableAttributes`](/reference/api/settings#update-filterable-attributes): @@ -83,7 +55,7 @@ Once you have configured `filterableAttributes`, you can filter search results b -## Sorting by timestamp +## Sorting by date To sort search results chronologically, add your document's timestamp field to the list of [`sortableAttributes`](/reference/api/settings#update-sortable-attributes): From 93977c98698757d3839067450b6cd6a969a0d40a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Jun 2025 13:50:15 +0000 Subject: [PATCH 06/13] Update code samples [skip ci] --- snippets/samples/code_samples_async_guide_canceled_by_1.mdx | 2 +- .../samples/code_samples_async_guide_filter_by_date_1.mdx | 2 +- snippets/samples/code_samples_async_guide_filter_by_ids_1.mdx | 2 +- .../code_samples_async_guide_filter_by_index_uids_1.mdx | 2 +- .../samples/code_samples_async_guide_filter_by_statuses_1.mdx | 2 +- .../samples/code_samples_async_guide_filter_by_types_1.mdx | 2 +- .../samples/code_samples_async_guide_multiple_filters_1.mdx | 2 +- snippets/samples/code_samples_cancel_tasks_1.mdx | 2 +- snippets/samples/code_samples_delete_tasks_1.mdx | 2 +- snippets/samples/code_samples_get_all_batches_1.mdx | 2 +- snippets/samples/code_samples_get_all_tasks_1.mdx | 2 +- snippets/samples/code_samples_get_all_tasks_paginating_1.mdx | 2 +- snippets/samples/code_samples_get_all_tasks_paginating_2.mdx | 2 +- snippets/samples/code_samples_get_batch_1.mdx | 2 +- snippets/samples/code_samples_get_task_1.mdx | 2 +- .../samples/code_samples_getting_started_add_documents.mdx | 4 ++-- .../code_samples_getting_started_check_task_status.mdx | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/snippets/samples/code_samples_async_guide_canceled_by_1.mdx b/snippets/samples/code_samples_async_guide_canceled_by_1.mdx index e0858ef26..3a57082d0 100644 --- a/snippets/samples/code_samples_async_guide_canceled_by_1.mdx +++ b/snippets/samples/code_samples_async_guide_canceled_by_1.mdx @@ -1,7 +1,7 @@ ```javascript JS -client.getTasks({ canceledBy: [9, 15] }) +client.tasks.getTasks({ canceledBy: [9, 15] }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_filter_by_date_1.mdx b/snippets/samples/code_samples_async_guide_filter_by_date_1.mdx index 533459928..71dde2562 100644 --- a/snippets/samples/code_samples_async_guide_filter_by_date_1.mdx +++ b/snippets/samples/code_samples_async_guide_filter_by_date_1.mdx @@ -1,7 +1,7 @@ ```javascript JS -client.getTasks({ afterEnqueuedAt: '2020-10-11T11:49:53.000Z' }) +client.tasks.getTasks({ afterEnqueuedAt: '2020-10-11T11:49:53.000Z' }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_filter_by_ids_1.mdx b/snippets/samples/code_samples_async_guide_filter_by_ids_1.mdx index 99a27c9bc..6cb6ea208 100644 --- a/snippets/samples/code_samples_async_guide_filter_by_ids_1.mdx +++ b/snippets/samples/code_samples_async_guide_filter_by_ids_1.mdx @@ -1,7 +1,7 @@ ```javascript JS -client.getTasks({ uids: [5, 10, 13] }) +client.tasks.getTasks({ uids: [5, 10, 13] }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_filter_by_index_uids_1.mdx b/snippets/samples/code_samples_async_guide_filter_by_index_uids_1.mdx index 6d7f860a2..93f6a2f07 100644 --- a/snippets/samples/code_samples_async_guide_filter_by_index_uids_1.mdx +++ b/snippets/samples/code_samples_async_guide_filter_by_index_uids_1.mdx @@ -1,7 +1,7 @@ ```javascript JS -client.getTasks({ indexUids: ['movies'] }) +client.tasks.getTasks({ indexUids: ['movies'] }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_filter_by_statuses_1.mdx b/snippets/samples/code_samples_async_guide_filter_by_statuses_1.mdx index 60547108a..5f67d39c0 100644 --- a/snippets/samples/code_samples_async_guide_filter_by_statuses_1.mdx +++ b/snippets/samples/code_samples_async_guide_filter_by_statuses_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTasks({ statuses: ['failed', 'canceled'] }) +client.tasks.getTasks({ statuses: ['failed', 'canceled'] }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_filter_by_types_1.mdx b/snippets/samples/code_samples_async_guide_filter_by_types_1.mdx index 8a2932248..ae03564fb 100644 --- a/snippets/samples/code_samples_async_guide_filter_by_types_1.mdx +++ b/snippets/samples/code_samples_async_guide_filter_by_types_1.mdx @@ -1,7 +1,7 @@ ```javascript JS -client.getTasks({ types: ['dumpCreation', 'indexSwap'] }) +client.tasks.getTasks({ types: ['dumpCreation', 'indexSwap'] }) ``` ```python Python diff --git a/snippets/samples/code_samples_async_guide_multiple_filters_1.mdx b/snippets/samples/code_samples_async_guide_multiple_filters_1.mdx index 1f47a44be..8e8a326a6 100644 --- a/snippets/samples/code_samples_async_guide_multiple_filters_1.mdx +++ b/snippets/samples/code_samples_async_guide_multiple_filters_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTasks({ +client.tasks.getTasks({ indexUids: ['movies'], types: ['documentAdditionOrUpdate','documentDeletion'], statuses: ['processing'] diff --git a/snippets/samples/code_samples_cancel_tasks_1.mdx b/snippets/samples/code_samples_cancel_tasks_1.mdx index 0a1dea3e5..f5ca8a4d5 100644 --- a/snippets/samples/code_samples_cancel_tasks_1.mdx +++ b/snippets/samples/code_samples_cancel_tasks_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.cancelTasks({ uids: [1, 2] }) +client.tasks.cancelTasks({ uids: [1, 2] }) ``` ```python Python diff --git a/snippets/samples/code_samples_delete_tasks_1.mdx b/snippets/samples/code_samples_delete_tasks_1.mdx index 89d9a9140..6a31c17d4 100644 --- a/snippets/samples/code_samples_delete_tasks_1.mdx +++ b/snippets/samples/code_samples_delete_tasks_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.deleteTasks({ uids: [1, 2] }) +client.tasks.deleteTasks({ uids: [1, 2] }) ``` ```python Python diff --git a/snippets/samples/code_samples_get_all_batches_1.mdx b/snippets/samples/code_samples_get_all_batches_1.mdx index e5111e70f..bce94d986 100644 --- a/snippets/samples/code_samples_get_all_batches_1.mdx +++ b/snippets/samples/code_samples_get_all_batches_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getBatches(); +client.batches.getBatches(); ``` ```python Python diff --git a/snippets/samples/code_samples_get_all_tasks_1.mdx b/snippets/samples/code_samples_get_all_tasks_1.mdx index 14d708f8a..2cec5a0ce 100644 --- a/snippets/samples/code_samples_get_all_tasks_1.mdx +++ b/snippets/samples/code_samples_get_all_tasks_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTasks() +client.tasks.getTasks() ``` ```python Python diff --git a/snippets/samples/code_samples_get_all_tasks_paginating_1.mdx b/snippets/samples/code_samples_get_all_tasks_paginating_1.mdx index f55f2e074..4b7389169 100644 --- a/snippets/samples/code_samples_get_all_tasks_paginating_1.mdx +++ b/snippets/samples/code_samples_get_all_tasks_paginating_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTasks({ limit: 2, from: 10 }) +client.tasks.getTasks({ limit: 2, from: 10 }) ``` ```python Python diff --git a/snippets/samples/code_samples_get_all_tasks_paginating_2.mdx b/snippets/samples/code_samples_get_all_tasks_paginating_2.mdx index 9bd1c5ed3..30edc01b5 100644 --- a/snippets/samples/code_samples_get_all_tasks_paginating_2.mdx +++ b/snippets/samples/code_samples_get_all_tasks_paginating_2.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTasks({ limit: 2, from: 8 }) +client.tasks.getTasks({ limit: 2, from: 8 }) ``` ```python Python diff --git a/snippets/samples/code_samples_get_batch_1.mdx b/snippets/samples/code_samples_get_batch_1.mdx index 5fb8e7db5..7b9a8a94c 100644 --- a/snippets/samples/code_samples_get_batch_1.mdx +++ b/snippets/samples/code_samples_get_batch_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getBatch(BATCH_UID); +client.batches.getBatch(BATCH_UID); ``` ```python Python diff --git a/snippets/samples/code_samples_get_task_1.mdx b/snippets/samples/code_samples_get_task_1.mdx index 658a938a9..7a1414ac0 100644 --- a/snippets/samples/code_samples_get_task_1.mdx +++ b/snippets/samples/code_samples_get_task_1.mdx @@ -6,7 +6,7 @@ curl \ ``` ```javascript JS -client.getTask(1) +client.tasks.getTask(1) ``` ```python Python diff --git a/snippets/samples/code_samples_getting_started_add_documents.mdx b/snippets/samples/code_samples_getting_started_add_documents.mdx index 2fe2d4f67..551eff373 100644 --- a/snippets/samples/code_samples_getting_started_add_documents.mdx +++ b/snippets/samples/code_samples_getting_started_add_documents.mdx @@ -78,14 +78,14 @@ $client->index('movies')->addDocuments($movies); // // com.meilisearch.sdk // meilisearch-java -// 0.14.5 +// 0.14.7 // pom // // For Gradle // Add the following line to the `dependencies` section of your `build.gradle`: // -// implementation 'com.meilisearch.sdk:meilisearch-java:0.14.5' +// implementation 'com.meilisearch.sdk:meilisearch-java:0.14.7' // In your .java file: import com.meilisearch.sdk; diff --git a/snippets/samples/code_samples_getting_started_check_task_status.mdx b/snippets/samples/code_samples_getting_started_check_task_status.mdx index a3b1a1116..ca8333dbe 100644 --- a/snippets/samples/code_samples_getting_started_check_task_status.mdx +++ b/snippets/samples/code_samples_getting_started_check_task_status.mdx @@ -7,7 +7,7 @@ curl \ ``` ```javascript JS -client.getTask(0) +client.tasks.getTask(0) ``` ```python Python From f1bf062dc5721e4f06c3d96fe8dfea6a2d6d6d1f Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 15:55:37 +0200 Subject: [PATCH 07/13] v1.15: Cancel dumpless update (#3257) * add task `type`s * add rollback instructions * first draft ready --- learn/update_and_migration/updating.mdx | 20 ++++++++++++++++---- reference/api/tasks.mdx | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/learn/update_and_migration/updating.mdx b/learn/update_and_migration/updating.mdx index d2fd3be50..7a701af94 100644 --- a/learn/update_and_migration/updating.mdx +++ b/learn/update_and_migration/updating.mdx @@ -47,9 +47,9 @@ Once the project has been successfully updated, you will receive an email confir ## Updating a self-hosted Meilisearch instance - You may update a self-hosted instance in one of two ways: with or without a dump. + This guide only works for v0.15 and above. If you are using an older Meilisearch release, please [contact support](https://discord.meilisearch.com) for more information. @@ -156,9 +156,21 @@ Meilisearch should launch normally and immediately create a new `UpgradeDatabase While the task is processing, you may continue making search queries. You may also enqueue new tasks. Meilisearch will only process new tasks once `UpgradeDatabase` is completed. - -If after the upgrade is completed the task status is set to `failed` or Meilisearch returns internal error messages to your queries, [restart your instance from the snapshot](/learn/data_backup/snapshots#starting-from-a-snapshot) you generated during step 1. You may then retry the upgrade, or upgrade using a dump. You are also welcome to open an issue on the [Meilisearch repository](https://github.com/meilisearch/meilisearch). - +#### Rolling back an update + +If the upgrade is taking too long, or if after the upgrade is completed its task status is set to `failed`, you can cancel the upgrade task. + +Cancelling the update task automatically rolls back your database to its state before the upgrade began. + +After launching Meilisearch with `--experimental-dumpless-upgrade` flag: + +1. Cancel the `databaseUpgrade` task +2. If you cancelled the update before it failed, skip to the next step. If the update failed, relaunch Meilisearch using the binary of the version you were upgrading to +3. Wait for Meilisearch to process your cancellation request +4. Replace the new binary with the binary of the previous version +5. Relaunch Meilisearch + +If you are upgrading Meilisearch to \<= v1.14, you must instead [restart your instance from the snapshot](/learn/data_backup/snapshots#starting-from-a-snapshot) you generated during step 1. You may then retry the upgrade, or upgrade using a dump. You are also welcome to open an issue on the [Meilisearch repository](https://github.com/meilisearch/meilisearch). ### Using a dump diff --git a/reference/api/tasks.mdx b/reference/api/tasks.mdx index 56121cd13..35cc86e90 100644 --- a/reference/api/tasks.mdx +++ b/reference/api/tasks.mdx @@ -74,7 +74,7 @@ This value is always `null` for [global tasks](/learn/async/asynchronous_operati ### `type` **Type**: String
-**Description**: Type of operation performed by the task. Possible values are `indexCreation`, `indexUpdate`, `indexDeletion`, `indexSwap`, `documentAdditionOrUpdate`, `documentDeletion`, `settingsUpdate`, `dumpCreation`, `taskCancelation`, `taskDeletion`, and `snapshotCreation` +**Description**: Type of operation performed by the task. Possible values are `indexCreation`, `indexUpdate`, `indexDeletion`, `indexSwap`, `documentAdditionOrUpdate`, `documentDeletion`, `settingsUpdate`, `dumpCreation`, `taskCancelation`, `taskDeletion`, `databaseUpgrade`, `documentEdition`, and `snapshotCreation` ### `canceledBy` From 2c7f95301210f41cc2176c5586a09065c348506c Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 15:57:48 +0200 Subject: [PATCH 08/13] v1.15: Disable typo tolerance on numbers (#3258) --- .code-samples.meilisearch.yaml | 7 +++++++ learn/relevancy/typo_tolerance_settings.mdx | 10 ++++++++++ reference/api/settings.mdx | 3 +++ 3 files changed, 20 insertions(+) diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index fe0f564e0..29ba3c97e 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -831,6 +831,13 @@ typo_tolerance_guide_4: |- "twoTypos": 10 } }' +typo_tolerance_guide_5: |- + curl \ + -X PATCH 'MEILISEARCH_URL/indexes/movies/settings/typo-tolerance' \ + -H 'Content-Type: application/json' \ + --data-binary '{ + "disableOnNumbers": true + }' updating_guide_check_version_new_authorization_header: |- curl \ -X GET 'http:///version' \ diff --git a/learn/relevancy/typo_tolerance_settings.mdx b/learn/relevancy/typo_tolerance_settings.mdx index a7e39f81f..4dd814cf8 100644 --- a/learn/relevancy/typo_tolerance_settings.mdx +++ b/learn/relevancy/typo_tolerance_settings.mdx @@ -65,3 +65,13 @@ You can disable typo tolerance for a specific [document attribute](/learn/gettin With the above settings, matches in the `title` attribute will not tolerate any typos. For example, a search for `beautiful` (9 characters) will not match the movie "Biutiful" starring Javier Bardem. With the default settings, this would be a match. + +## `disableOnNumbers` + +You can disable typo tolerance for all numeric values across all indexes and search requests by setting `disableOnNumbers` to `true`: + + + +By default, typo tolerance on numerical values is turned on. This may lead to false positives, such as a search for `2024` matching documents containing `2025` or `2004`. + +When `disableOnNumbers` is set to `true`, queries with numbers only return exact matches. Besides reducing the number of false positives, disabling typo tolerance on numbers may also improve indexing performance. diff --git a/reference/api/settings.mdx b/reference/api/settings.mdx index 32d8af752..a500ee35b 100644 --- a/reference/api/settings.mdx +++ b/reference/api/settings.mdx @@ -2347,6 +2347,7 @@ Typo tolerance helps users find relevant results even when their search queries | **`minWordSizeForTypos.twoTypos`** | Integer | `9` | The minimum word size for accepting 2 typos; must be between `oneTypo` and `255` | | **`disableOnWords`** | Array of strings | Empty | An array of words for which the typo tolerance feature is disabled | | **`disableOnAttributes`** | Array of strings | Empty | An array of attributes for which the typo tolerance feature is disabled | +| **`disableOnNumbers`** | Boolean | `false` | Whether typo tolerance for numbers is disabled or enabled | ### Get typo tolerance settings @@ -2401,6 +2402,7 @@ Partially update the typo tolerance settings for an index. }, "disableOnWords": [, , …], "disableOnAttributes": [, , …] + "disableOnNumbers": , } ``` @@ -2411,6 +2413,7 @@ Partially update the typo tolerance settings for an index. | **`minWordSizeForTypos.twoTypos`** | Integer | `9` | The minimum word size for accepting 2 typos; must be between `oneTypo` and `255` | | **`disableOnWords`** | Array of strings | Empty | An array of words for which the typo tolerance feature is disabled | | **`disableOnAttributes`** | Array of strings | Empty | An array of attributes for which the typo tolerance feature is disabled | +| **`disableOnNumbers`** | Boolean | `false` | Whether typo tolerance for numbers is disabled or enabled | #### Example From 927874302d365615e994ffa0d7647c5d57aef5a4 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 15:58:33 +0200 Subject: [PATCH 09/13] add `batchStrategy` to batch object (#3260) --- reference/api/batches.mdx | 44 +++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/reference/api/batches.mdx b/reference/api/batches.mdx index c6382d693..a9e48c97c 100644 --- a/reference/api/batches.mdx +++ b/reference/api/batches.mdx @@ -16,6 +16,21 @@ The `/batches` route gives information about the progress of batches of [asynchr ```json { "uid": 0, + "progress": { + "steps": [ + { + "currentStep": "extracting words", + "finished": 2, + "total": 9, + }, + { + "currentStep": "document", + "finished": 30546, + "total": 31944, + } + ], + "percentage": 32.8471 + }, "details": { "receivedDocuments": 6, "indexedDocuments": 6 @@ -38,21 +53,7 @@ The `/batches` route gives information about the progress of batches of [asynchr "duration": "PT0.250518S", "startedAt": "2024-12-10T15:20:30.18182Z", "finishedAt": "2024-12-10T15:20:30.432338Z", - "progress": { - "steps": [ - { - "currentStep": "extracting words", - "finished": 2, - "total": 9, - }, - { - "currentStep": "document", - "finished": 30546, - "total": 31944, - } - ], - "percentage": 32.8471 - } + "batchStrategy": "batched all enqueued tasks" } ``` @@ -137,6 +138,11 @@ Size of each internal database, including by how much it changed after a batch w **Type**: String
**Description**: The date and time when the tasks finished `processing`, whether `failed`, `succeeded`, or `canceled`, in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format +### `batchStrategy` + +**Type**: String
+**Description**: A string describing the logic behind the creation of the batch. Can contain useful information when diagnosing indexing performance issues. + ## Get batches @@ -193,13 +199,13 @@ For example, `?uids=0` returns a batch containing the task with a `taskUid` equa "results": [ { "uid": 2, + "progress": null, "details": { "stopWords": [ "of", "the" ] }, - "progress": null, "stats": { "totalNbTasks": 1, "status": { @@ -217,7 +223,8 @@ For example, `?uids=0` returns a batch containing the task with a `taskUid` equa }, "duration": "PT0.110083S", "startedAt": "2024-12-10T15:49:04.995321Z", - "finishedAt": "2024-12-10T15:49:05.105404Z" + "finishedAt": "2024-12-10T15:49:05.105404Z", + "batchStrategy": "batched all enqueued tasks" } ], "total": 3, @@ -267,6 +274,7 @@ Get a single batch. }, "duration": "PT0.364788S", "startedAt": "2024-12-10T15:48:49.672141Z", - "finishedAt": "2024-12-10T15:48:50.036929Z" + "finishedAt": "2024-12-10T15:48:50.036929Z", + "batchStrategy": "batched all enqueued tasks" } ``` From 1e8d7faf0a02b54efe8e2d85a14a5657cbbada26 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 15:59:58 +0200 Subject: [PATCH 10/13] Update postman collection (#3261) --- assets/misc/meilisearch-collection-postman.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/misc/meilisearch-collection-postman.json b/assets/misc/meilisearch-collection-postman.json index 0773dccbc..deb15aa68 100644 --- a/assets/misc/meilisearch-collection-postman.json +++ b/assets/misc/meilisearch-collection-postman.json @@ -1,7 +1,7 @@ { "info": { "_postman_id": "b321d331-d809-4909-8e49-e29c8d749d32", - "name": "Meilisearch v1.14", + "name": "Meilisearch v1.15", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "25294324" }, @@ -1898,7 +1898,7 @@ ], "body": { "mode": "raw", - "raw": "{\n \"minWordSizeForTypos\": {\n \"oneTypo\": 2,\n \"twoTypos\": 11\n },\n \"disableOnWords\": [\"Prince\"],\n \"disableOnAttributes\": [\"genre\"]\n}" + "raw": "{\n \"minWordSizeForTypos\": {\n \"oneTypo\": 2,\n \"twoTypos\": 11\n },\n \"disableOnWords\": [\"Prince\"],\n \"disableOnAttributes\": [\"genre\"],\n \"disableOnNumbers\": true\n}" }, "url": { "raw": "{{url}}/indexes/{{indexUID}}/settings/typo-tolerance", From e5c524919586b3fab062c043610d88c61adf3666 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 16:00:26 +0200 Subject: [PATCH 11/13] v1.13: Experimental: Limit batch payload size (#3265) --- learn/resources/experimental_features_overview.mdx | 1 + learn/self_hosted/configure_meilisearch_at_launch.mdx | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/learn/resources/experimental_features_overview.mdx b/learn/resources/experimental_features_overview.mdx index 9cecf64d8..0b26e3a36 100644 --- a/learn/resources/experimental_features_overview.mdx +++ b/learn/resources/experimental_features_overview.mdx @@ -57,3 +57,4 @@ Activating or deactivating experimental features this way does not require you t | [Dumpless upgrade](/learn/self_hosted/configure_meilisearch_at_launch#dumpless-upgrade) | Upgrade Meilisearch without generating a dump | API route | | [Composite embedders](/reference/api/settings#composite-embedders) | Enable composite embedders | API route | | [Search query embedding cache](/learn/self_hosted/configure_meilisearch_at_launch#search-query-embedding-cache) | Enable a cache for search query embeddings | CLI flag or environment variable | +| [Maximum batch payload size](/learn/self_hosted/configure_meilisearch_at_launch#maximum-batch-payload-size) | Limit batch payload size | CLI flag or environment variable | diff --git a/learn/self_hosted/configure_meilisearch_at_launch.mdx b/learn/self_hosted/configure_meilisearch_at_launch.mdx index 519fb85a7..c7c2db7eb 100644 --- a/learn/self_hosted/configure_meilisearch_at_launch.mdx +++ b/learn/self_hosted/configure_meilisearch_at_launch.mdx @@ -506,6 +506,15 @@ Includes an authentication token in the authorization header when notifying the Limit the number of tasks Meilisearch performs in a single batch. May improve stability in systems handling a large queue of resource-intensive tasks. +### Maximum batch payload size + +**Environment variable**: `MEILI_EXPERIMENTAL_LIMIT_BATCHED_TASKS_TOTAL_SIZE`
+**CLI option**: `--experimental-limit-batched-tasks-total-size`
+**Default value**: `None`
+**Expected value**: an integer + +Sets a maximum payload size for batches in bytes. Smaller batches are less efficient, but consume less RAM and reduce immediate latency. + ### Replication parameters From 30dc06e7516dd7bcd1caa2ddf2ef2a923a834030 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 16:23:15 +0200 Subject: [PATCH 12/13] v1.13.1: Update `/stats` with `rawDocumentDbSize` and `avgDocumentDbSize` (#3266) --- reference/api/stats.mdx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/reference/api/stats.mdx b/reference/api/stats.mdx index 50ee50125..a58317a5b 100644 --- a/reference/api/stats.mdx +++ b/reference/api/stats.mdx @@ -23,6 +23,8 @@ The `/stats` route gives extended information and metrics about indexes and the "numberOfDocuments": 19654, "numberOfEmbeddedDocuments": 1, "numberOfEmbeddings": 1, + "rawDocumentDbSize": 5320, + "avgDocumentSize": 92, "isIndexing": false, "fieldDistribution": { "poster": 19654, @@ -36,6 +38,8 @@ The `/stats` route gives extended information and metrics about indexes and the "numberOfDocuments": 5, "numberOfEmbeddedDocuments": 5, "numberOfEmbeddings": 10, + "rawDocumentDbSize": 8780, + "avgDocumentSize": 422, "isIndexing": false, "fieldDistribution": { "id": 5, @@ -58,6 +62,8 @@ The `/stats` route gives extended information and metrics about indexes and the | **`numberOfDocuments`** | Integer | Total number of documents in an index | | **`numberOfEmbeddedDocuments`** | Integer | Total number of documents with at least one embedding | | **`numberOfEmbeddings`** | Integer | Total number of embeddings in an index | +| **`rawDocumentDbSize`** | Integer | Storage space claimed by all documents in the index in bytes | +| **`avgDocumentDbSize`** | Integer | Total size of the documents stored in an index divided by the number of documents in that same index | | **`isIndexing`** | Boolean | If `true`, the index is still processing documents and attempts to search will result in undefined behavior | | **`fieldDistribution`** | Object | Shows every field in the index along with the total number of documents containing that field in said index | @@ -87,6 +93,8 @@ Get stats of all indexes. "numberOfDocuments": 19654, "numberOfEmbeddedDocuments": 1, "numberOfEmbeddings": 1, + "rawDocumentDbSize": 2087, + "avgDocumentSize": 41, "isIndexing": false, "fieldDistribution": { "poster": 19654, @@ -136,6 +144,8 @@ Get stats of an index. "numberOfDocuments": 19654, "numberOfEmbeddedDocuments": 1, "numberOfEmbeddings": 1, + "rawDocumentDbSize": 3618, + "avgDocumentSize": 104, "isIndexing": false, "fieldDistribution": { "poster": 19654, From 6d3165ad1f81e76d9663655195f9c38fa216c1b5 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 3 Jun 2025 16:24:44 +0200 Subject: [PATCH 13/13] v1.15: Uncompressed snapshots (#3267) --- learn/resources/experimental_features_overview.mdx | 1 + learn/self_hosted/configure_meilisearch_at_launch.mdx | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/learn/resources/experimental_features_overview.mdx b/learn/resources/experimental_features_overview.mdx index 0b26e3a36..c245ee2aa 100644 --- a/learn/resources/experimental_features_overview.mdx +++ b/learn/resources/experimental_features_overview.mdx @@ -57,4 +57,5 @@ Activating or deactivating experimental features this way does not require you t | [Dumpless upgrade](/learn/self_hosted/configure_meilisearch_at_launch#dumpless-upgrade) | Upgrade Meilisearch without generating a dump | API route | | [Composite embedders](/reference/api/settings#composite-embedders) | Enable composite embedders | API route | | [Search query embedding cache](/learn/self_hosted/configure_meilisearch_at_launch#search-query-embedding-cache) | Enable a cache for search query embeddings | CLI flag or environment variable | +| [Uncompressed snapshots](/learn/self_hosted/configure_meilisearch_at_launch#uncompressed-snapshots) | Disable snapshot compaction | CLI flag or environment variable | | [Maximum batch payload size](/learn/self_hosted/configure_meilisearch_at_launch#maximum-batch-payload-size) | Limit batch payload size | CLI flag or environment variable | diff --git a/learn/self_hosted/configure_meilisearch_at_launch.mdx b/learn/self_hosted/configure_meilisearch_at_launch.mdx index c7c2db7eb..5d062f118 100644 --- a/learn/self_hosted/configure_meilisearch_at_launch.mdx +++ b/learn/self_hosted/configure_meilisearch_at_launch.mdx @@ -435,6 +435,13 @@ When using the configuration file, it is also possible to explicitly pass a bool Sets the directory where Meilisearch will store snapshots. +### Uncompressed snapshots + +**Environment variable**: `MEILI_EXPERIMENTAL_NO_SNAPSHOT_COMPACTION`
+**CLI option**: `--experimental-no-snapshot-compaction`
+ +Disables snapshot compression. This may significantly speed up snapshot creation at the cost of bigger snapshot files. + ### Import snapshot **Environment variable**: `MEILI_IMPORT_SNAPSHOT`