Skip to content

Releases: meilisearch/meilisearch

v1.15.0-rc.3 🦘

26 May 13:03
ff64c64
Compare
Choose a tag to compare
v1.15.0-rc.3 🦘 Pre-release
Pre-release

Warning

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.

Full Changelog: v1.15.0-rc.2...v1.15.0-rc.3

v1.15.0-rc.2 🦘

19 May 11:25
e547bfb
Compare
Choose a tag to compare
v1.15.0-rc.2 🦘 Pre-release
Pre-release

Warning

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.

This release fixes a docker deployment issue (by @dureuill in #5577) but is otherwise identical to RC 1

v1.15.0-rc.1 🦘

19 May 07:32
a25eb9c
Compare
Choose a tag to compare
v1.15.0-rc.1 🦘 Pre-release
Pre-release

Warning

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.

🦋 Fixes

  • Fix a panic in the search that could happen when looking for typos with a search prefix having more than 65k possible hits in the DB: Only intern in case of single-typo when looking for single typoes by @dureuill in #5564
  • Make sure that passing MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKS to 0 results in Meilisearch never processing any kind of task. By @irevoire in #5565
  • Forbid value 0 for maxTotalHits in the index settings by @irevoire in #5566

⚙️ Misc

  • Snapshot compaction is enabled again by default, with an experimental CLI flag to disable the compaction manually. By @irevoire in #5560

v1.15.0-rc.0 🦘

12 May 16:17
d9a5278
Compare
Choose a tag to compare
v1.15.0-rc.0 🦘 Pre-release
Pre-release

v1.15.0 release changelogs

Warning

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.

Meilisearch v1.15 adds a new typo tolerance setting, allowing you to disable typo tolerance for numbers. It also enables comparison operators for string filters.

🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment happens between 4 to 48 hours after a new version becomes available.

Some SDKs might not include all new features. Consult the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).

New features and updates 🔥

Disable typo tolerance for numbers

Set typoTolerance.disableOnNumbers to true to disable typo tolerance for numbers:

curl -X POST 'http://localhost:7700/indexes/movies/settings' \
  -H 'Content-Type: application/json' \
  -d '{
    "typoTolerance": {"disableOnNumbers": true}
  }'

Deactivating the typo tolerance on numbers can be useful when trying to reduce false positives, such as a query term 2024 returning results that include 2025 and 2004. It may also improve indexing performance.

Done by @ManyTheFish in #5494.

Lexicographic string filters

This release allows you to filter strings lexicographically by enabling comparison operators (<, <=, >, >=, TO) on string values:

curl -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -d '{
    "filter": "release_date >= '2024-06'"
  }'

This new feature can be particularly useful when filtering human-readable dates.

Done by @dureuill in #5535.

Other improvements

  • Allows cancelling an upgrade to a new Meilisearch version by rolling back all upgraded indexes by @dureuill in #5523
  • Support EC private key as SSL certificate by @HDT3213 in #5471
  • Stop compacting snapshots to speed up their generation by @dureuill in #5498
  • Add new batchCreationComplete field in the batches stats by @dureuill in #5488 and #5530
  • Add log field tracking time spent searching in the vector store by @Kerollmops in #5525
  • Improve filterable error messages by @CodeMan62 in #5425
  • Improve error messages on embeddings dimension mismatch by @vuthanhtung2412 in #5449
  • Update /network URL validation error message format by @CodeMan62 in #5486
  • Expose the task queue's status size in the Prometheus metrics by @DanasFi in #5512

Fixes 🐞

Misc

❤️ Thanks again to our external contributors:

v1.14.0 🦫

14 Apr 08:29
94b4300
Compare
Choose a tag to compare

Meilisearch v1.14 gives more granular control over which parts of filters you can disable for indexing performance optimization. This release also includes composite embedders, which can improve embedding generation during search and indexing, and a new route to retrieve multiple documents by their IDs.

🧰 All official Meilisearch integrations (including SDKs, clients, and other tools) are compatible with this Meilisearch release. Integration deployment happens between 4 to 48 hours after a new version becomes available.

Some SDKs might not include all new features. Consult the project repository for detailed information. Is a feature you need missing from your chosen SDK? Create an issue letting us know you need it, or, for open-source karma points, open a PR implementing it (we'll love you for that ❤️).

New features and updates 🔥

Granular filterable attribute settings

v1.14 gives you more control over which types of filter you want to disable in your searches. This allows you to further optimize indexing speeds by letting you activate only the filter features you need.

Use PATCH /indexes/INDEX_NAME/settings to specify which filters you want to enable for each attribute in your documents:

{
	"filterableAttributes": [
	  {
	    "attributePatterns": ["genre", "artist"],
	    "features": {
	      "facetSearch": true,
	      "filter": {
	        "equality": true,
	        "comparison": false
	      }
	    }
	  },
	  {
	    "attributePatterns": ["rank"],
	    "features": {
	      "facetSearch": false,
	      "filter": {
	        "equality": true,
	        "comparison": true
	      }
	    }
	  }
	]
}

For more details about this feature, please refer to the dedicated documentation page.

Done by @ManyTheFish in #5254.

Composite embedders

This feature allows using different embedders at search and indexing time. This can be useful when optimizing AI-powered search performance. For example, you may prefer to use:

  • A remote embedder during indexing, as remote embedders have higher bandwidth and can generate more embeddings per second
  • A local embedder when answering to search queries, as local embedders have lower latency and can respond more quickly to user input

To use the feature, follow these steps:

  1. Enable the Composite embedders feature with the Meilisearch Cloud interface, or with the /experimental-features route:
curl MEILISEARCH_URL/experimental-features \
  -H 'Content-Type: application/json'  \
  -d '{"compositeEmbedders": true}'
  1. Next, create an embedder, setting its source to "composite" and defining one searchEmbedder and one indexingEmbedder:
{
  "embedders": {
    "text": {
      "source": "composite",
      "searchEmbedder": {
        "source": "huggingFace",
        "model": "baai/bge-base-en-v1.5",
        "revision": "a5beb1e3e68b9ab74eb54cfd186867f64f240e1a"
      },
      "indexingEmbedder": {
        "source": "rest",
        "url": "https://URL.endpoints.huggingface.cloud",
        "apiKey": "hf_XXXXXXX",
        "documentTemplate": "Your {{doc.template}}",
        "request": {
          "inputs": [
            "{{text}}",
            "{{..}}"
          ]
        },
        "response": [
          "{{embedding}}",
          "{{..}}"
        ]
      }
    }
  }
}
  1. Once the composite embedder has been created, Meilisearch will use its indexingEmbedder during indexing and searchEmbedder when responding to user queries

For more details about this feature, please refer to its public usage page.

Done by @dureuill in #5371 and #5401.

Retrieve multiple documents by ID

It is now possible to retrieve multiple documents by their IDs:

curl -H 'Content-Type: application/json' MEILISEARCH_URL/indexes/INDEX_UID/documents -d '{ "ids": ["cody", "finn", "brandy", "gambit"] }'
{
  "results": [
    {
      "id": "brandy",
      "info": 13765493
    },
    {
      "id": "finn",
      "info": 35863
    },
    {
      "id": "cody",
      "info": 122263
    },
    {
      "id": "gambit",
      "info": 22222
    }
  ],
  "offset": 0,
  "limit": 20,
  "total": 4
}

Warning

Documents are not returned in the queried order. Non-existent documents are ignored.

Done by @dureuill in #5384.

Other improvements

Fixes

Misc

⚠️ Please consider that the batches stats content can change anytime.

❤️ Thanks again to our external contributors:

v1.14.0-rc.3 🦫

09 Apr 14:54
94b4300
Compare
Choose a tag to compare
v1.14.0-rc.3 🦫 Pre-release
Pre-release

Warning

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.

What's Changed

  • make meilisearch accept cancellation tasks even when the disk is full by @irevoire in #5492

Full Changelog: v1.14.0-rc.2...v1.14.0-rc.3

v1.14.0-rc.2 🦫

01 Apr 15:46
418fa47
Compare
Choose a tag to compare
v1.14.0-rc.2 🦫 Pre-release
Pre-release

Warning

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.

🦋 Fixes

  • enabling rankingScoreThreshold no longer causes _rankingScore to be miscalculated by @barloes and @dureuill in #5313
  • Validate dimensions of embedding when receiving documents with _vectors by @dureuill in #5478

⚡ Performance

🔎 Observability

New Contributors

Full Changelog: v1.14.0-rc.1...v1.14.0-rc.2

v1.14.0-rc.1 🦫

26 Mar 15:57
9ce7ccf
Compare
Choose a tag to compare
v1.14.0-rc.1 🦫 Pre-release
Pre-release

What's Changed

Features

Add more progress levels to measure merging by @Kerollmops in #5422

Computes the durations of each indexing step and displays them in the batch route. #5356

⚠️ When working with it in the doc or the integrations, please consider that the content can change anytime. It must not be enforced.

Show database sizes batches by @Kerollmops in #5457

Computes the size of each database and displays them in the batch route. #5463

⚠️ When working with it in the doc or the integrations, please consider that the content can change anytime. It must not be enforced.

Other enhancements

Bug fixes

Dependencies bumps

Full Changelog: v1.14.0-rc.0...v1.14.0-rc.1

v1.14.0-rc.0 🦫

17 Mar 09:34
2500e3c
Compare
Choose a tag to compare
v1.14.0-rc.0 🦫 Pre-release
Pre-release

Warning

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[#new] and feedback about new features.

Meilisearch v1.14 exposes a more granular way to express your filterable attributes! 🎉 This release also improves semantic search performance, embedding indexing speed, and a new route to get multiple documents by IDs.

New features and updates 🔥

Granular Filterable Attribute Settings

This feature allows for the choice of the filter features of each filterable attribute with high granularity.
Activating or deactivating a feature will have an impact on the indexing time.
To use the feature, use the new filterableAttributes format in the settings route (PATCH /indexes/INDEX_UID/settings):

{
	"filterableAttributes": [
	  {
	    "attributePatterns": ["genre", "artist"], 
	    "features": { "facetSearch": true, "filter": { "equality": true, "comparison": false } }
	  },
	  {
	    "attributePatterns": ["rank"],
	    "features": { "facetSearch": false, "filter": { "equality": true, "comparison": true } }
	  },
	  {
	    "attributePatterns": ["albumId"],
	    "features": { "facetSearch": false, "filter": { "equality": true, "comparison": false } }
	  },
	]
}

🗒️ In this example, we activate/deactivate each feature depending on the usage of each filterable attribute, the genre and artist are expected to be strings so the facet search and the equality operators (=/!=) are activated, but, the comparison operators are deactivated (>=, <=, ...) because it's not useful and will save time during the indexing process.
However, the rank is expected to be a number, so the facet search is deactivated in favor of the the comparison operators.
Last, the albumId is expected to be unique, so only the equality operators (=/!=) are activated.

For more details about this feature, please refer to its public usage page.

Done by @ManyTheFish in #5254.

Composite Embedders

This feature allows using different embedders at search and indexing time, which is useful to optimize the embedder to each situation:

  • Using a remote embedder for indexing in bulk, as remote embedders provide the highest bandwidth (embeddings/s)
  • Using a local embedder for answering search queries, as local embedders provide the lowest latency (time to first embedding)

To use the feature, follow these steps:

  1. Enable the Composite embedders feature from the Cloud dashboard or with the following:
curl -H 'Content-Type: application/json' MEILISEARCH_URL/experimental-features -d '{ "compositeEmbedders": true }'
  1. Send a settings task (PATCH /indexes/INDEX_UID/settings) containing an embedder with source: "composite", and with the parameters searchEmbedder and indexingEmbedder describing the embedder at search time (resp. indexing time). For example, using a Hugging Face inference endpoint.
{
    "embedders": {
        "text": {
            "source": "composite",
            "searchEmbedder": {
                "source": "huggingFace", // locally computed embeddings using a model from the Hugging Face Hub
                "model": "baai/bge-base-en-v1.5",
                "revision": "a5beb1e3e68b9ab74eb54cfd186867f64f240e1a"
            },
            "indexingEmbedder": {
                "source": "rest", // remotely computed embeddings using Hugging Face inference endpoints
                "url": "https://URL.endpoints.huggingface.cloud",
                "apiKey": "hf_XXXXXXX",
                "documentTemplate": "Your {{doc.template}}",
                "request": {
                    "inputs": [
                        "{{text}}",
                        "{{..}}"
                    ]
                },
                "response": [
                    "{{embedding}}",
                    "{{..}}"
                ]
            }
        }
    }
}
  1. Send documents to the index. They will be indexed remotely using the Hugging Face inference endpoint.
  2. Perform semantic search queries, they will be embedded using the local model fetched from the Hugging Face Hub.

For more details about this feature, please refer to its public usage page.

Done by @dureuill in #5371.

Other improvements

Fixes 🐞

Misc

❤️ Thanks again to our external contributors:

v1.13.3 🕊️

05 Mar 08:47
4afb381
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.13.2...v1.13.3