v1.1.0-rc.0 🐡
Pre-releaseMeilisearch 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: geoBoundingBox
geosearch filter, addition of a facetStats
objects to queries using the facets
search parameters, and customization of CSV separators.
📖 Meilisearch's official documentation will be ready for the official v1.1.0 release. Meanwhile, work-in-progress documentation is available here.
New features and improvements 🔥
Multi-index search: allow multiple searches in a single request
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
}
]
}
Introduce facetStats
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
}
}
}
New geosearch filter: _geoBoundingBox
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 left corner, and a second array specifying the bottom right corner.
Done by @gmourier and @irevoire in #3405 and #3529.
Removing limits on index size and count
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.
Experimental feature: monitor Meilisearch usage with Prometheus
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.
Improve language support
- 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
Done in #3347 and on Charabia by @choznerol, @cymruu, @james-2001 and @ManyTheFish.
Other improvements
- 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 and update endpoint (#3505, #3534) @MixusMinimax and @irevoire - Improve error messages: introduction of "did you mean ...?" suggestions when doing typos on 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
Fixes 🐞
- 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.6 (#3514) @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
Misc
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
- 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.