v0.29.0 🦔
This release includes a much-requested feature: an option to require all query terms to be present in search results. The absence of this feature prevented some users from upgrading to newer Meilisearch versions. Additionally, v0.29 contains several indexing speed improvements.
🧰 Most integrations (SDKs, clients, libraries) will be compatible with this version within four hours of the release. Sometimes this can take up to 24 hours, depending on the issues we encounter during the release.
Here is the exhaustive list of integrations not compatible with v0.29.0:
- meilisearch-dart and meilisearch-swift: though you can use still use both libraries with v0.29.0, the
matchingStrategy
feature is not yet available. Let us know if you really need it—and contributions are always welcome! - meilisearch-java: Our team is still working on refactoring the code, and the SDK cannot be used with v0.29.0. Follow the repository to know when it will be compatible.
New features and improvements 🔥
Customize matching strategy
It is now possible to control how Meilisearch matches documents during search by choosing to return only documents containing all query terms.
How to activate it?
curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{ "q": "american ninja", "matchingStrategy": "all" }'
By setting "matchingStrategy": "all"
In the above example, we ensure Meilisearch will only return documents containing both "american" AND "ninja".
Meilisearch's default matching strategy is last
. It will still return documents containing all the query words, followed by documents that don't contain all the query words.
Check out the documentation for more information on matchingStrategy
.
Made by @ManyTheFish in #2578 and meilisearch/milli#598.
Thai language support
Meilisearch now offers optimized support for Thai 🇹🇭
Want optimized support for your language? Consider contributing to the Meilisearch tokenizer by following the CONTRIBUTING.md file and integrating your intended normalizer/segmenter.
The core team is always happy to help our contributors. Do drop us a line if you need us to clarify anything!
Made by our dear contributor @aFluffyHotdog and by @ManyTheFish in meilisearch/charabia#114, meilisearch/charabia#115, meilisearch/milli##611, and #2636.
Performance improvements for indexing
We improved Meilisearch's indexing speed, especially for indexes using filterableAttributes
and when updating and deleting documents.
For more information on the main improvements, check out the following issues: meilisearch/product#513 and meilisearch/product#520.
Made by @loiclec and @irevoire in #2689, #2690, meilisearch/milli#607, meilisearch/milli#606, meilisearch/milli#587, meilisearch/milli#557,meilisearch/milli#579, and meilisearch/milli#590.
Filtering: introduce the EXISTS
and IN
operators
You can now use the EXISTS
and IN
operators with the filter
search parameter during search.
With the following set of documents:
{ "id": 1, "product": "T-shirt", "price": 20, "color": "yellow" }
{ "id": 2, "product": "T-shirt", "color": "red" }
{ "id": 3, "product": "T-shirt", "price": 30 }
{ "id": 4, "product": "T-shirt", "price": 40 }
- The filter
price EXISTS
will select documents1
,3
, and4
. - The filter
price IN [30, 20]
will select documents1
and3
.
These operators can be combined with the existing NOT
(!=
) operator.
Read more about filtering in Meilisearch's documentation.
Made by @loiclec in #2636, meilisearch/milli#596, and meilisearch/milli#556.
Key management
When managing keys, the *
helper can now be used to express a set of actions in the actions
array.
For example, instead of specifying indexes.create
, indexes.get
, indexes.update
, indexes.delete
; you can now use indexes.*
.
Made by our dear contributors @Mcdostone and @phdavis1027 in #2080 and #2579.
Behavior changes ⚠️
Auto-batching
This previously experimental feature is now enabled by default.
If you enabled auto-batching in previous versions using --enable-auto-batching
, remove this flag when running Meilisearch v0.29.0. All other auto-batching settings (--debounce-duration-sec
, --max-batch-size
, and --max-documents-per-batch
) have been removed.
If you did not enable auto-batching before, the transition should be seamless and increase indexing speed 🏎️
If you experience any issues during indexing, try using --disable-auto-batching
flag (or the environment variable MEILI_DISABLE_AUTO_BATCHING
).
Made by @Kerollmops in meilisearch/milli#561, #2523, and #2677.
!=
(NOT
) filter operator
This behavior change is consistent with the EXISTS
and IN
operators. The NOT
filter now also matches documents missing the specified attributes.
More explanation with examples here.
Made by @loiclec in #2636, and meilisearch/milli#596.
Fixes 🐞
- Clamp max size of databases to a multiple of system page size (#2662) @ManyTheFish
- Prevent whitespace trimming during document id validation (#2636 and meilisearch/milli#599) @ManyTheFish
- Support https in
print_launch_resume
(#2664) @evpeople - Filters: reserved keywords must wrapped in quotation marks when used field names/values (#2636 and meilisearch/milli#596) @loiclec
- Fix filtering selection (#2636 and meilisearch/milli#568) @GraDKh
Misc
- Completely rework the README (#2504) @CaroFG, @curquiza, @guimachiavelli, and @gmourier
- Add analytics to the
/stats
routes (#2674) @irevoire - Update link to Cloud beta form (#2625) @davelarkan
- Internal feature: integrate
/metrics
route (#2657) @pavo-tusker - Fix typo (#2508, #2517, #2556) @ryanrussell
- Use nightly for
cargo fmt
in CI (#2519) @curquiza - Fix content of dump/assets for testing (#2544) @loiclec
- Add Dependabot for GHA (#2561) @curquiza
- Update Docker credentials (#2539) @curquiza
- Add new CI: cron GHA to create an issue "Update dependencies" (#2585) @VasiliySoldatkin
- Add a dedicated section for Language Support in the issue template (#2592) @ManyTheFish
❤️ Thanks again to our external contributors: