Releases: meilisearch/meilisearch
v1.12.0-rc.2 🦗
What's Changed
- Fix index settings opt out by @ManyTheFish in #5101
- Update mini-dashboard to v0.2.16 version by @curquiza in #5102
Full Changelog: v1.12.0-rc.1...v1.12.0-rc.2
v1.12.0-rc.1 🦗
What's Changed
- Use the published crates versions by @Kerollmops in #5090
- Improve error handling when writing into LMDB by @Kerollmops in #5089
- Fix bugs for v1.12 by @ManyTheFish in #5062
- Precise spans for new indexer by @dureuill in #5092
- Settings opt out by @ManyTheFish in #5091
- Fix pagination when embedding fails by @dureuill in #5063
- Update charabia v0.9.2 by @ManyTheFish in #5098
- Span to measure the part of db writes that is after the merge/extraction by @dureuill in #5095
Full Changelog: v1.12.0-rc.0...v1.12.0-rc.1
v1.12.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 and feedback about new features.
Meilisearch v1.12 introduces huge improvements regarding indexing speed. The team worked hard to divise time to import huge datasets by two. You can also customize your settings to adapt your indexing needs and so, the indexing speed that fits your usage.
New features and updates 🔥
Improve indexing speed
Indexing time for huge dataset import (multiple millions of documents) is divided by two!
Done by @dureuill, @ManyTheFish, and @Kerollmops in #4900.
More visibility around indexing tasks
In order to give more visibility around indexing processing around your task
, especially when indexing big documents, new routes have been introduced:
GET /batches/:uid
: returns a specificbatch
objectGET /batches
: return a list ofbatch
objects
The same query parameters than GET /tasks
route can be used to apply filtering.
Also, a new field is introduced in the task object: batch
.
Done by @irevoire in #5060, #5070, #5080
Other improvements
- Introduce the
reverse
query parameter forGET /tasks
route set tofalse
by default. If set totrue
, then the tasks will be returned in reversed order (the oldest first). Done by @irevoire in #5048. - Make matches consider phrases as a single
Match
by @flevi29 in #4928 - Adds new metrics to prometheus by @PedroTurik in #5044
- Add
indices
field to_matchesPosition
to specify where in an array a match comes from, by @LukasKalbertodt in #5005
Fixes 🐞
Misc
- Dependencies updates
- Update benchmarks to match the new crates subfolder by @Kerollmops in #5021
- Fix the benchmarks by @irevoire in #5037
- Bump Swatinem/rust-cache from 2.7.1 to 2.7.5 in #5030
- CIs and tests
- Improve performance of
delete_index.rs
by @DerTimonius in #4963 - Improve performance of
create_index.rs
by @DerTimonius in #4962 - Improve performance of
get_documents.rs
by @PedroTurik in #5025 - Improve performance of
formatted.rs
by @PedroTurik in #5043 - Fix the path used in the flaky tests CI by @Kerollmops in #5049
- Improve performance of
- Misc
- Rollback the Meilisearch Kawaii logo by @Kerollmops in #5017
- Add image source label to Dockerfile by @wuast94 in #4990
- Hide code complexity into a subfolder by @Kerollmops in #5016
- Internal tool: implement offline upgrade from v1.10 to v1.11 by @irevoire in #5034
❤️ Thanks again to our external contributors:
v1.11.3 🐿️
What's Changed
- For REST/OpenAI/ollama autoembedders users: Retry if deserialization of remote response failed by @dureuill in #5058
Full Changelog: v1.11.2...v1.11.3
v1.11.2 🐿️
What's Changed
Full Changelog: v1.11.1...v1.11.2
v1.11.1 🐿️
What's Changed
Full Changelog: v1.11.0...v1.11.1
v1.11.0 🐿️
Meilisearch v1.11 introduces AI-powered search performance improvements thanks to binary quantization and various usage changes, all of which are steps towards a future stabilization of the feature. We have also improved federated search usage following user feedback.
🧰 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 - AI-powered search improvements
This release is Meilisearch's first step towards stabilizing AI-powered search and introduces a few breaking changes to its API. Consult the PRD for full usage details.
Done by @dureuill in #4906, #4920, #4892, and #4938.
⚠️ Breaking changes
- When performing AI-powered searches,
hybrid.embedder
is now a mandatory parameter inGET
andPOST
/indexes/{:indexUid}/search
- As a consequence, it is now mandatory to pass
hybrid
even for pure semantic searches embedder
is now a mandatory parameter inGET
andPOST
/indexes/{:indexUid}/similar
- Meilisearch now ignores
semanticRatio
and performs a pure semantic search for queries that includevector
but notq
Addition & improvements
- The default model for OpenAI is now
text-embedding-3-small
instead oftext-embedding-ada-002
- This release introduces a new embedder option:
documentTemplateMaxBytes
. Meilisearch will truncate a document's template text when it goes over the specified limit - Fields in
documentTemplate
include a newfield.is_searchable
property. The default document template now filters out both empty fields and fields not in the searchable attributes list:
v1.11:
{% for field in fields %}
{% if field.is_searchable and not field.value == nil %}
{{ field.name }}: {{ field.value }}\n
{% endif %}
{% endfor %}
v1.10:
{% for field in fields %}
{{ field.name }}: {{ field.value }}\n
{% endfor %}
Embedders using the v1.10 document template will continue working as before. The new default document template will only work with newly created embedders.
Vector database indexing performance improvements
v1.11 introduces a new embedder option, binaryQuantized
:
curl \
-X PATCH 'http://localhost:7700/indexes/movies/settings' \
-H 'Content-Type: application/json' \
--data-binary '{
"embedders": {
"image2text": {
"binaryQuantized": true
}
}
}'
Enable binary quantization to convert embeddings of floating point numbers into embeddings of boolean values. This will negatively impact the relevancy of AI-powered searches but significantly improve performance in large collections with more than 100 dimensions.
In our benchmarks, this reduced the size of the database by a factor of 10 and divided the indexing time by a factor of 6 with little impact on search times.
Warning
Enabling this feature will update all of your vectors to contain only 1
s or -1
s, significantly impacting relevancy.
You cannot revert this option once you enable it. Before setting binaryQuantized
to true
, Meilisearch recommends testing it in a smaller or duplicate index in a development environment.
Federated search improvements
Facet distribution and stats for federated searches
This release adds two new federated search options, facetsByIndex
and mergeFacets
. These allow you to request a federated search for facet distributions and stats data.
Facet information by index
To obtain facet distribution and stats for each separate index, use facetsByIndex
when querying the POST
/multi-search
endpoint:
POST /multi-search
{
"federation": {
"limit": 20,
"offset": 0,
"facetsByIndex": {
"movies": ["title", "id"],
"comics": ["title"],
}
},
"queries": [
{
"q": "Batman",
"indexUid": "movies"
},
{
"q": "Batman",
"indexUid": "comics"
}
]
}
The multi-search response will include a new field, facetsByIndex
with facet data separated per index:
{
"hits": […],
…
"facetsByIndex": {
"movies": {
"distribution": {
"title": {
"Batman returns": 1
},
"id": {
"42": 1
}
},
"stats": {
"id": {
"min": 42,
"max": 42
}
}
},
…
}
}
Merged facet information
To obtain facet distribution and stats for all indexes merged into a single, use both facetsByIndex
and mergeFacets
when querying the POST
/multi-search
endpoint:
POST /multi-search
{
"federation": {
"limit": 20,
"offset": 0,
"facetsByIndex": {
"movies": ["title", "id"],
"comics": ["title"],
},
"mergeFacets": {
"maxValuesPerFacet": 10,
}
}
"queries": [
{
"q": "Batman",
"indexUid": "movies"
},
{
"q": "Batman",
"indexUid": "comics"
}
]
}
The response includes two new fields, facetDistribution
and facetStarts
:
{
"hits": […],
…
"facetDistribution": {
"title": {
"Batman returns": 1
"Batman: the killing joke":
},
"id": {
"42": 1
}
},
"facetStats": {
"id": {
"min": 42,
"max": 42
}
}
}
Experimental — New STARTS WITH
filter operator
Enable the experimental feature to use the STARTS WITH
filter operator:
curl \
-X PATCH 'http://localhost:7700/experimental-features/' \
-H 'Content-Type: application/json' \
--data-binary '{
"containsFilter": true
}'
Use the STARTS WITH
operator when filtering:
curl \
-X POST http://localhost:7700/indexes/movies/search \
-H 'Content-Type: application/json' \
--data-binary '{
"filter": "hero STARTS WITH spider"
}'
🗣️ This is an experimental feature, and we need your help to improve it! Share your thoughts and feedback on this GitHub discussion.
Done by @Kerollmops in #4939.
Other improvements
- Language support and localizedAttributes settings by @ManyTheFish in #4937
- Add ISO-639-1 variants
- Convert ISO-639-1 into ISO-639-3
- Add a German language tokenizer by @luflow in meilisearch/charabia#303 and in #4945
- Improve Turkish language support by @tkhshtsh0917 in meilisearch/charabia#305 and in #4957
- Upgrade "batch failed" log to error level in #4955 by @dureuill.
- Update the search UI: remove the forced capitalized fields, by @curquiza in #4993
Fixes 🐞
⚠️ When using federated search,query.facets
was silently ignored at the query level, but should not have been. It now returns the appropriate error. Usefederation.facetsByIndex
instead if you want facets to be applied during federated search.- Prometheus
/metrics
return the route pattern instead of the real route when returning the HTTP requests total by @irevoire in #4839 - Truncate values at the end of a list of facet values when the number of facet values is larger than
maxValuesPerFacet
. For example, settingmaxValuesPerFacet
to2
could result in["blue", "red", "yellow"]
, being truncated to["blue", "yellow"]
instead of ["blue", "red"]`. By @dureuill in #4929 - Improve the task cancellation when vectors are used, by @irevoire in #4971
- Swedish support: the characters
å
,ä
,ö
are no longer normalized toa
ando
. By @ManyTheFish in #4945 - Update rhai to fix an internal error when updating documents with a function (experimental) by @irevoire in #4960
- Fix the bad experimental search queue size by @irevoire in #4992
- Do not send empty edit document by function by @irevoire in #5001
- Display vectors when no custom vectors were ever provided by @dureuill in #5008
Misc
- Dependencies updates
- Security dependency upgrade: bump quinn-proto from 0.11.3 to 0.11.8 by @dependabot in #4911
- CIs and tests
- Documentation
- Fix broken links in README by @iornstein in #4943
- Misc
❤️ Thanks again to our external contributors:
v1.11.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.
Maintenance
v1.11.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.
Bugs Fixes
- fix the bad experimental search queue size by @irevoire in #4992
- Do not send empty edit document by function by @irevoire in #5001
- Display vectors when no custom vectors were ever provided by @dureuill in #5008
Experimental Features
See the release note of the v1.10.3 for more information about the two experimental cli flags that are being introduced in this RC.
Misc
Full Changelog: v1.11.0-rc.1...v1.11.0-rc.2
v1.10.3 🦩
Search improvements
This PR lets you configure two behaviors of the engine through experimental cli flags:
- The number of searches Meilisearch can process concurrently per core with the
--experimental-nb-searches-per-core
cli flag - After how many seconds Meilisearch can consider a search as irrelevant and drop it straight away without processing it with the
--experimental-drop-search-after
cli flag
Full Changelog: v1.10.2...v1.10.3