Releases: meilisearch/meilisearch
v1.19.1 🪸
🐛 Performance improvements
Enhance hybrid search with filter performances
In previous versions of Meilisearch, mixing hybrid search with filters, as shown below, could multiply the search time by hundreds.
{
"q": "hello world",
"limit": 100,
"filter": "tag=science"
"hybrid": {
"semanticRatio": 0.5,
"embedder": "default"
}
}
Meilisearch will now directly compute the semantic distance with the filtered candidates if only a few candidates come from the filter, instead of searching for the closest embeddings matching the filter in the vector database.
v1.19.0 🪸
🚀 Enhancements
Automatically shard documents to scale horizontally
Meilisearch can now automatically distribute documents between multiple instances automatically using the new sharding feature.
Find a guide on implementing sharding in the documentation.
Note
Sharding is an advanced feature available exclusively in Meilisearch Enterprise Edition (EE).
The EE features are governed by the Business Source License 1.1, which allows you to use, test, and develop with sharding for free in non-production environments. Please reach out to us before using it in production.
🐛 Bug Fixes
- Takes the allowed max memory of the container when computing the max memory to use (#5729) @martin-g
❤️ Huge thanks to our contributors: @Kerollmops, @dureuill and @martin-g.
v1.18.0 🕷️
🚀 Enhancements
- Return
queryVector
in the search response when usingretrieveVectors
(#5778) @Mubelotix - Allow retrieving documents with vectors from specific embedders (#5741) @Mubelotix
- Support renaming indexes using the API (#5829) @irevoire
❤️ Huge thanks to our contributors: @Kerollmops, @Mubelotix, @irevoire and @qdequele.
v1.17.1 🐀
v1.17.0 🐀
Note
Want to make your search feel more natural? Try our new chat completions route and turn your queries into conversations. Easy to set up, works with your favorite LLMs.
Enhancements
- Support Webhook API by @Mubelotix in #5785
Check the in progress documentation (PR merged soon) - Optimize and stabalize performance the
STARTS_WITH
filter by @Mubelotix in #5783
No need to activate the experimental feature anymore to use this operator 🎉 - Docker image: sign container image using Cosign in keyless mode by @LeSuisse in #3265
Bugs
- Turn chat settings to
PATCH
by @Mubelotix in #5807
⚠️ This fix leads to a breaking change on:PUT
→PATCH
. Integrations and SDKs will adapt to this change. - Fix
snapshotCreation
task being included in snapshot by @Mubelotix in #5773
Maintenance
- Tests & CI
- Ignore yet another flaky test by @dureuill in #5740
- Fix Rails CI by @curquiza in #5756
- Use Server::wait_task() instead of Index::wait_task() by @martin-g in #5703
- Faster batches:: IT tests by @martin-g in #5626
- Adapt Go CI to recent change in the Go repo by @curquiza in #5790
- Bump svenstaro/upload-release-action from 2.11.1 to 2.11.2 by @dependabot[bot] in #5795
- Bump sigstore/cosign-installer from 3.8.2 to 3.9.2 by @dependabot[bot] in #5794
- Documentation
v1.16.0 🦚
Meilisearch v1.16 introduces two main features: multimodal embeddings and a new /export
route. Multimodal embeddings use AI-powered search to index images in addition to textual documents. The /export
route simplifies migrating from a local Meilisearch instance to Meilisearch Cloud.
🧰 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 🔥
Experimental feature: Multimodal embeddings
v1.16 allows indexing and searching non-textual documents, as well as performing searches with image queries. This new feature uses multimodal embedders to provide a common semantic representation for images, texts, and any other piece of data.
Usage
First, enable the multimodal
experimental feature:
curl \
-X PATCH 'MEILISEARCH_URL/experimental-features/' \
-H 'Content-Type: application/json' \
--data-binary '{
"multimodal": true
}'
Next, pick an embedder provider that supports multimodal embeddings such as Cohere or VoyageAI to start building the embedding configuration.
The following is an example configuration for multimodal embedder using VoyageAI:
curl \
-X PATCH 'MEILISEARCH_URL/indexes/INDEX_NAME/settings/embedders' \
-H 'Content-Type: application/json' \
--data-binary '{
"voyage": {
"source": "rest",
"url": "https://api.voyageai.com/v1/multimodalembeddings",
"apiKey": "VOYAGE_API_KEY",
"indexingFragments": {
"text": {
"value": {
"content": [
{
"type": "text",
"text": "A movie titled {{doc.title}} whose description starts with {{doc.overview|truncateWords:20}}."
}
]
}
},
"poster": {
"value": {
"content": [
{
"type": "image_url",
"image_url": "{{doc.poster}}"
}
]
}
}
},
"searchFragments": {
"poster": {
"value": {
"content": [
{
"type": "image_url",
"image_url": "{{media.poster}}"
}
]
}
},
"image": {
"value": {
"content": [
{
"type": "image_base64",
"image_base64": "data:{{media.image.mime}};base64,{{media.image.data}}"
}
]
}
},
"text": {
"value": {
"content": [
{
"type": "text",
"text": "{{q}}"
}
]
}
}
},
"request": {
"inputs": [
"{{fragment}}",
"{{..}}"
],
"model": "voyage-multimodal-3"
},
"response": {
"data": [
{
"embedding": "{{embedding}}"
},
"{{..}}"
]
}
}}
The configuration above sets up Meilisearch to generate vectors for two fields: text
and poster
. It also allows users to perform searches with an image URL, a raw image, or regular text.
Use the new media
search parameter together with one of the searchFragments
you specified in your embedder to search with an image:
curl -X POST 'MEILISEARCH_URL/indexes/INDEX_NAME/search' \
-H 'content-type: application/json' \
--data-binary '{
"media": {
"poster": "https://image.tmdb.org/t/p/w500/pgqj7QoBPWFLLKtLEpPmFYFRMgB.jpg"
},
"hybrid": {
"embedder": "EMBEDDER_NAME"
}
}'
You can also perform a text search with q
and hybrid
:
curl -X POST 'MEILISEARCH_URL/indexes/INDEX_NAME/search' \
-H 'content-type: application/json' \
--data-binary '{
"q": "A movie with lightsabers in space",
"hybrid": {
"embedder": "voyage",
"semanticRatio": 0.5
}
}'
Meilisearch performs searches all fields with embeddings when parsing hybrid
queries targeting indexes with multimodal embedders.
For more information about this feature, please refer to its public usage page
The new /export
route
v1.16 introduces a new /export
route that allows transferring documents between instances without having to create a dump or a snapshot. This feature is particularly useful when migrating from a local machine to Meilisearch Cloud.
Usage
To transfer data between instances, query /export
and point its url
parameter to the URL of the target instance:
curl \
-X POST 'MEILISEARCH_URL/export' \
-H 'Content-Type: application/json' \
--data-binary '{
"url": "http://localhost:7711"
}'
This will generate an export and task start migrating data between instances. Depending on the target instance, you may also have to supply an API key with full admin permissions in the apiKey
parameter. Consult the documentation for an exhaustive list of accepted parameters.
If the request fails, Meilisearch will retry a few times before setting its status to failed. You may also cancel an export task manually. In this case, Meilisearch will interrupt the task locally, but not in the target instance.
Done by @Kerollmops with the help of @Mubelotix in #5670
Other improvements
- Add support for nested wildcards in
attributes_to_search_on
by @lblack00 in #5548 - Improve support of geo field extraction from documents by @nnethercott in #5592
- Use all CPUs when importing dumps by @nnethercott in #5527
- Display the last embedder error live in batches by @Mubelotix in #5707
- Add fallback instance option to revert to old indexer by @ManyTheFish in #5687
- Introduce filters in the chat completions by @Kerollmops in #5710
- Allow sorting on the /documents route by @Mubelotix in #5716
- A Read-Only Admin key will be created in new empty databases, to prevent accidentally writing to database while investigating, by @Mubelotix in #5693
- Use the edition 2024 documents indexer in the dumps by @Kerollmops in #5762
Fixes 🐞
- Improve the performance when managing single-typo words by @dureuill in #5551
- Fix distinct attribute functionality for hybrid search by @dureuill in #5614
- Fix bug related to Cyrillic having different typo tolerance due to byte counting bug by @arthurgousset in #5617
- Fix Gemini
base_url
when used with OpenAI clients by @diksipav in #5692 - Remove Gemini from LLM-providers list due to incompatibility with OpenAI by @Kerollmops in #5708
- Fix bug when using the environment variable for
--experimental-limit-batched-tasks-total-size
by @Kerollmops in #5705 - Fix
disableOnNumbers
not being affected by typo tolerance settings resets by @Nymuxyzo in #5702 - Make sure to recover from missing update files by @Kerollmops in #5683
- Add analytics to chat completions by @Kerollmops in #5709
- Fix: Preserve order of searchable attributes when modified by @ManyTheFish in #5751
- Fix Total Hits being wrong when rankingScoreThreshold is used by @Mubelotix in #5725
- Fix incorrect document count in stats after clearing all documents by @kametsun in #5754
- Fix chat settings dumpless upgrade by @Kerollmops in #5761
- Fix panic when attempting to remove an embedder that does not exist by @Mubelotix in #5734
- Fixes an issue where sending searchParameters:
{}
in index chat settings would incorrectly set the limit to 20 instead of resetting to empty defaults - Update the mini-dashboard to v0.2.22 and fix a crash by @Kerollmops in #5798
Misc
- Dependencies updates
- Remove old dependencies by @Mubelotix in #5689
- Upgrade dependencies by @Kerollmops in #5686
- Bump the mini-dashboard to v0.2.20 by @Kerollmops in #5728
- CIs and tests (34 PRs, one folk, yes!)
- perf: Faster IT tests - stats.rs by @Mar...
v1.16.0-rc.5 🦚
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
- Update Prometheus chat metrics names to follow the name convention by @nicolasvienot in #5787
- Update the mini-dashboard to v0.2.21 and fix a crash by @ManyTheFish in #5791
Full Changelog: v1.16.0-rc.4...v1.16.0-rc.5
v1.16.0-rc.4 🦚
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.
🐛 Bugfixes
- Fix API keys when using dumpless upgrade to v1.16.0 by @Mubelotix in #5780
- fix: index chat settings
searchParameters
incorrectly set withlimit: 20
when sending empty object by @nicolasvienot in #5770
New Contributors
- @nicolasvienot made their first contribution in #5770 ❤️
Full Changelog: v1.16.0-rc.3...v1.16.0-rc.4
v1.16.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
- Use the edition 2024 documents indexer in the dumps by @Kerollmops in #5762
- Regenerate all fragments when coming from a user-provided vector by @dureuill in #5763
Full Changelog: v1.16.0-rc.2...v1.16.0-rc.3
v1.16.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.
What's Changed
- Various fixes on the export route by @Mubelotix in #5753
- Fix: Preserve order of searchable attributes when modified by @ManyTheFish in #5751
- Introduce filters in the chat completions by @Kerollmops in #5710
- Fix Total Hits being wrong when rankingScoreThreshold is used by @Mubelotix in #5725
- Allow sorting on the /documents route by @Mubelotix in #5716
- Tests for multimodal by @Mubelotix in #5734
- Fix incorrect document count in stats after clearing all documents by @kametsun in #5754
- Fix chat settings dumpless upgrade by @Kerollmops in #5761