Releases: meilisearch/meilisearch
v1.15.0-rc.3 🦘
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.
- Only intern in case of typo when looking for one or two typoes by @CodeMan62 in #5573
- Update charabia v0.9.5 by @ManyTheFish in #5557
- Rename batch creation complete by @dureuill in #5588
- Fix another derivation-related panic in the search by @dureuill in #5587
Full Changelog: v1.15.0-rc.2...v1.15.0-rc.3
v1.15.0-rc.2 🦘
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 🦘
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
formaxTotalHits
in the index settings by @irevoire in #5566
⚙️ Misc
v1.15.0-rc.0 🦘
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.
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 🐞
- Fix
_matchesPosition
length calculation to improve client-side cropping by @shaokeyibb in #5446 - Fix
_geo
ranking rule by @HDT3213 in #5487
Misc
- Dependencies updates
- Update Rust to 1.85.1 by @Kerollmops in #5480
- Update charabia v0.9.3 by @ManyTheFish in #5466
- Update the Prometheus to fix a security vulnerability by @Kerollmops in #5513
- CIs and tests
- Setup the Milestone CI to update the Ruleset by @Kerollmops in #5444
- Make the CI work with GitHub's merge queue grouping by @Kerollmops in #5445
- Remove Bors references from the repository by @Kerollmops in #5447
- Split unit tests for tasks by @shu-kitamura in #5424
- Misc
- Improve dumpless upgrade compatibility by @irevoire in #5395
- Fix links and formatting in README for clarity and consistency by @ZeroZ-lab in #5533
❤️ Thanks again to our external contributors:
v1.14.0 🦫
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:
- 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}'
- Next, create an embedder, setting its
source
to"composite"
and defining onesearchEmbedder
and oneindexingEmbedder
:
{
"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}}",
"{{..}}"
]
}
}
}
}
- Once the composite embedder has been created, Meilisearch will use its
indexingEmbedder
during indexing andsearchEmbedder
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.
Other improvements
- Batch together
/documents
requests using eitherPUT
orPOST
by @Kerollmops in #5293 - Display timestamped internal indexing steps on the
/batches
route by @Kerollmops in #5356 and #5364 - Introduce
exhaustiveFacetCount
parameter to/facet-search
route to retrieve an exhaustive facet count by @ManyTheFish in #5369 - Reduce RAM consumption of arroy by @irevoire in meilisearch/arroy#105
- Experimental feature: Cache embeddings during search (Read more in the feature discussion) by @dureuill in #5418
- Extend batch progress view to include indexing of vectors by @irevoire in #5420
- Armenian characters are no longer case-sensitive by @ManyTheFish in #5454
- Avoid reindexing searchables when the order changes by @ManyTheFish in #5402
- Accept cancellation tasks even when the disk is full by @irevoire in #5492
Fixes
- Geo update bug by @ManyTheFish in #5407
- Fix prefix search on attributes listed in
disabledOnAttributes
settings by @ManyTheFish in #5415 (fixes #5347 and #5452) - Fix CI to work with merge queues by @Kerollmops in #5456
- Support fetching the pooling method from the model configuration by @dureuill in #5355
- Delete unused prefixes by @Kerollmops in #5413
- Fixes mini dashboard to prevent the panel from popping up every time by @curquiza in #5436
- 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
Misc
- Dependencies updates
- Bump Ubuntu in the CI from 20.04 to 22.04 by @Kerollmops in #5338
- Bump heed to v0.22 by @irevoire and @Kerollmops in #5406
- Bump ring to v0.17.14 to compile on old aarch64 by @Kerollmops in #5423
- Bump zip from 2.2.2 to 2.3.0 by @dependabot in #5426
- CIs and tests
- Improve test performance of get_index.rs by @DerTimonius in #5210
- Ollama Integration Tests by @Kerollmops in #5308
- Ensure the settings routes are properly configured when a new field is added to the Settings struct by @MichaScant in #5149
- Skip a snapshot test on Windows by @Kerollmops in #5383
- Fix CI to work with merge queues by @Kerollmops in #5456
- Accept total batch size in human size by @Kerollmops in #5421
- Add more progress levels to measure merging and post-processing by @Kerollmops in #5422 and #5468
- Isolate word fst usage to dedicate it to typo-correction by @ManyTheFish in #5415
- Show database sizes batches by @Kerollmops in #5457 and #5464
⚠️ Please consider that the batches stats content can change anytime.
- Improve performance of computing document stats by @Kerollmops in #5465
❤️ Thanks again to our external contributors:
v1.14.0-rc.3 🦫
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
Full Changelog: v1.14.0-rc.2...v1.14.0-rc.3
v1.14.0-rc.2 🦫
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
- Improve performance of computing document stats by @Kerollmops in #5465
🔎 Observability
- More detailed Post Processing progress trace by @Kerollmops in #5468
- Prefer camelCase for internal database sizes db name by @Kerollmops in #5464
New Contributors
Full Changelog: v1.14.0-rc.1...v1.14.0-rc.2
v1.14.0-rc.1 🦫
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
- Accept total batch size in human size by @Kerollmops in #5421
- Avoid reindexing searchable order changes by @ManyTheFish in #5402
Bug fixes
- Geo update bug by @ManyTheFish in #5407
- Isolate word fst usage by @ManyTheFish in #5415
- Fix CI to work with merge queues by @Kerollmops in #5456
Dependencies bumps
- Bump ring to v0.17.14 to compile on old aarch64 by @Kerollmops in #5423
- Bump zip from 2.2.2 to 2.3.0 by @dependabot in #5426
- Update Charabia v0.9.3 by @ManyTheFish in #5454
- Update mini-dashboard to v0.2.19 version by @curquiza in #5436
Full Changelog: v1.14.0-rc.0...v1.14.0-rc.1
v1.14.0-rc.0 🦫
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
andartist
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:
- 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 }'
- Send a settings task (
PATCH /indexes/INDEX_UID/settings
) containing an embedder withsource: "composite"
, and with the parameterssearchEmbedder
andindexingEmbedder
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}}",
"{{..}}"
]
}
}
}
}
- Send documents to the index. They will be indexed remotely using the Hugging Face inference endpoint.
- 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.
Other improvements
- Get multiple documents by ids by @dureuill in #5384
- Support merging update and replacement operations by @Kerollmops in #5293
- Display the internal indexing steps with timings on the
/batches
route by @Kerollmops in #5356 - exhaustive facet search by @ManyTheFish in #5369
- Reduce RAM consumption of arroy by @irevoire in meilisearch/arroy#105
- Cache Embeddings in Search with an experimental feature by @dureuill in #5418
- Extend the batch progress view to the indexing of vectors by @irevoire in 5420
Fixes 🐞
- Support fetching the pooling method from the model configuration by @dureuill in #5355
- Make sure to delete useless prefixes by @Kerollmops in #5413
Misc
- Dependencies updates
- Bump Ubuntu in the CI from 20.04 to 22.04 by @Kerollmops in #5338
- Bump heed to v0.22 by @irevoire and @Kerollmops in #5406
- CIs and tests
- Improve test performance of get_index.rs by @DerTimonius in #5210
- Ollama Integration Tests by @Kerollmops in #5308
- Ensure the settings routes are now configurated when a new field is added to the Settings struct by @MichaScant in #5149
- Skip a snapshot test on Windows by @Kerollmops in #5383
- Misc
- Rename
callTrace
intoprogressTrace
by @Kerollmops in #5364 - Make composite embedders an experimental feature by @dureuill in #5401
- Rename
❤️ Thanks again to our external contributors: