Meilisearch v1.1.0 introduces the much-requested multi-index search! You can now use one single HTTP request to perform different searches in multiple indexes.
Additional new features include: the geoBoundingBox
geosearch filter, the addition of a facetStats
object to queries using the facets
search parameter, and the customization of CSV separators.
🧰 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 <3).
📖 Meilisearch's official documentation will be ready for the official v1.1.0 release. Meanwhile, work-in-progress documentation is available here.
Perform searches in multiple indexes in a single HTTP request using the new /multi-search
endpoint:
curl \
-X POST 'http://localhost:7700/multi-search' \
-H 'Content-Type: application/json' \
--data-binary '{
"queries": [
{
"indexUid": "products",
"q": "Nike",
"limit": 1
},
{
"indexUid": "brands",
"q": "Nike",
"limit": 1
}
]
}'
When you use the multi-index search endpoint, Meilisearch returns an array of results for each queried index:
{
"results": [
{
"indexUid": "products",
"hits": […],
"query": "Nike",
"processingTimeMs": 1,
"limit": 1,
"offset": 0,
"estimatedTotalHits": 17
},
{
"indexUid": "brands",
"hits": […],
"query": "Nike",
"processingTimeMs": 0,
"limit": 1,
"offset": 0,
"estimatedTotalHits": 7
}
]
}
Done by @dureuill in #3417
Queries containing the facets
parameter now include a facetStats
object by default:
curl \
-X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Content-Type: application/json' \
--data-binary '{
"facets": ["price"]
}'
facetStats
only lists facets containing numerical values. Facets with other types of values are not included in the facetStats
object. This object contains the minimum (min
) and the maximum (max
) of each numerical facet:
{
"hits": […],
"facetDistribution": {
"price": {…}
},
"facetStats": {
"price": {
"min": 2,
"max": 60
}
}
}
Done by @dureuill in #3423.
Use the filter
search parameter and the _geoBoundingBox
filter expression to obtain results contained within a specific geographic area.
curl \
-X POST 'http://localhost:7700/indexes/restaurants/search' \
-H 'Content-type:application/json' \
--data-binary '{ "filter": "_geoBoundingBox([45.472735, 9.184019],[45.473711, 9.185613] )" }'
_geoBoundingBox([lat, lng], [lat, lng])
accepts two parameters: one array specifying the top right corner, and a second array specifying the bottom left corner.
Done by @gmourier and @irevoire in #3405 and #3529.
Meilisearch no longer limits the size nor the amount of indexes a single instance may contain. You can now create an unlimited number of indexes, whose maximum size will be only dictated by the memory address space devoted to a single process by the OS. Under Linux, the limit is at about 80TiB.
Done by @dureuill in #3319, #3331 and #3544.
This release introduces an experimental feature allowing you to monitor metrics with Prometheus.
When launching Meilisearch, use the following flag:
meilisearch --experimental-enable-metrics
The /metrics
route will be available and compatible with Prometheus.
🗣️ Since this feature is experimental, we need your help to iterate on it! You are more than welcome to share your thoughts and your feedback on this discussion.
Done by @irevoire, @dureuill, and @james-2001 in #3496, #3524, #3538 and #3543.
- Enhance Greek support by normalizing diacritics and final sigma
- Enhance Arabic support by ignoring Tatweel
- Enhance language detection: detection now happens during indexing, reducing erroneous language recognition during search
🇯🇵 For people using Japanese datasets, language detection might still fail on small datasets. For instance, a song dataset that only contains titles in Japanese will still be detected as Chinese.
If you encounter any issue, we recommend you use this prototype which is an alternative version of Meilisearch v1.1 for Japanese users. Please, let us know about any feedback you may have in this dicussion.
Done in #3347, #3569 and on Charabia by @choznerol, @cymruu, @james-2001 and @ManyTheFish.
- Allow wildcards (
*
) at the end of index names when creating API keys or tenant tokens (#3174) @Kerollmops & @akhildevelops - Customize the CSV delimiter (default:
,
) with thecsvDelimiter
parameter in the document addition or update, and document addition or replace endpoints (#3505, #3534) @MixusMinimax and @irevoire - Improve error messages: introduction of "did you mean ...?" suggestions when making typos in a Meilisearch parameter (#3492) @irevoire
- Automatically batch addition and deletion tasks together to speed up indexing (#3470) @irevoire
- Accept
null
as a valid_geo
field when importing or updating documents (#3515) @irevoire - Reduce crate size (from ~200MB to ~50MB) by compressing dictionaries (#3347) @ManyTheFish
- Cache the indexes stats results (#3541) @irevoire
- Improve facet string normalization: fixes issues when using
sortBy
with accented characters (#3372) @ManyTheFish - Fix web interface issues: bump version of search preview to v0.2.7 (#3623) @bidoubiwa
- Unify "Bad latitude" and "Bad longitude" errors (#3479) @cymruu
- Prevent "Cannot allocate memory" errors when creating a lot of indexes (#3331) @dureuill
- Fix Japanese support (see the related issue) thanks to the new language detection (#3347) @ManyTheFish
- Remove
MDB_BAD_VALSIZE
error by avoiding fetching an LMDB value with an empty string (#3577) @Kerollmops - Fix snapshots permissions on Unix system (#3561) @irevoire
- Ensure the task queue is correctly imported (#3597) @irevoire
- Fix facet normalization (#3621) @ManyTheFish
The following changes do not impact user experience.
- GitHub CIs & test suite
- Create a preview environment for every PR using Uffizzi (#3040 and #3482) @waveywaves
- Improve
publish-aarch64
job that used ubuntu-18.04 (#3568) @curquiza - Add tests with rust nightly in CI (#3495) @ztkmkoo
- Add
--all
to test CI (#3403) @curquiza - Remove cache from test CI to prevent Windows CI failures (#3422) @curquiza
- Pin Rust version in Clippy job (#3451) @curquiza
- Update comments in version bump CI (#3519) @curquiza
- Fix cargo flaky (#3348) @irevoire
- Make clippy happy for Rust 1.67, allow
uninlined_format_args
(#3434) @dureuill
- Internal documentation
- Fixup
dumps-destination
intodump-directory
section header in help link (#3199) @dureuill - Add prototype guide to CONTRIBUTING.md (#3433) @curquiza
- Rework technical information in the README (#3399) @curquiza
- Add image hyperlink to the README.md (#3420) @gregsadetsky
- Update migration link to the docs (#3539) @curquiza
- Fixup
- Internal changes
- Add support for running milli on iOS and macOS when using App Sandbox by activating Cargo feature for LMDB's POSIX semaphores (#3407) @GregoryConrad
- Extract creation and last updated timestamp for v3 dump (#3343) @FrancisMurillo
- Gitignore VScode & Jetbrains IDE folders (#3480) @AymanHamdoun
- Import the milli repository (#3346) @Kerollmops
- Identify builds git tagged with
prototype-...
in CLI and analytics (#3467) @dureuill - Use the workspace inheritance: the Meilisearch version is now present in
Cargo.toml
at the root of the repository (#3499) @irevoire
- Dependencies: bump libgit2-sys and tokio (#3409 and #3456)
❤️ Thanks again to our external contributors:
- Meilisearch: @akhildevelops, @AymanHamdoun, @cymruu, @FrancisMurillom @GregoryConrad, @gregsadetsky, @james-2001, @MixusMinimax, @waveywaves, and @ztkmkoo.
- Charabia: @choznerol, @cymruu, and @james-2001.