Releases: meilisearch/meilisearch
v1.5.0-rc.2 🦙
Enhancement
- Integrate the
meilitool
command line interface in the meilisearch Docker image (#4167) @Kerollmops
In the running Meilisearch container, just domeilitool --help
to get the usage.
v1.5.0-rc.1 🦙
Enhancement
- Add Khmer language support by bumping Charabia version to v0.8.5 (#4169) @ManyTheFish and @xshadowlegendx
Fixes
- Update the version to the right release (v1.5.0 instead of v1.4.0) (#4154)
- Fix warning in CI (#4174) @irevoire
Thanks @choznerol and @xshadowlegendx for the contributions on Charabia ❤️
v1.5.0-rc.0 🦙
Meilisearch v1.5 introduces improvements in indexing speed and the possibility of triggering snapshots on-demand, as it's already possible with dumps.
New features and improvements 🔥
Indexing speed improvements
For datasets containing a lot of words (and/or with a large variety of words), we improved the indexing speed between 5% and 20%, depending on your use cases and your documents. The more your documents contain a lot of words, the more the improvements will be visible.
The relevancy can be slightly different for queries containing 4 words or more. Let us know here if you have any issues or unexpected behavior.
For datasets containing only a few words per field, even if you have a huge number of fields, the improvement might not be visible. Don't worry, we keep working on the indexing speed in the next sprint to address other use cases.
Done by @ManyTheFish in #4131
Snapshots on-demand
We have introduced a new route, similar to the /dumps
one, creating snapshots on-demand.
To create a snapshot:
curl -X POST HTTP://localhost:7700/snapshots
This route will return a task.
The snapshot file will be created on your machine in the directory defined with --snapshot-dir
flag (default: snapshots/
)
Experimental feature: export Puffin Reports
Enabling this experimental feature will make Meilisearch automatically export .puffin
file reports. Analyzing those files can give great information on what's happening inside the engine and how the Meilisearch team can improve the indexing performances.
How to activate the feature:
curl \
-X PATCH 'http://localhost:7700/experimental-features/' \
-H 'Content-Type: application/json' \
--data-binary '{
"exportPuffinReports": true
}'
📣 To get more information about the feature or to give any feedback, please refer to this discussion.
Done by @Kerollmops in #4073.
Other improvements
- Make the experimental
/metrics
route activable via HTTP, and not only via CLI flag. Done by @braddotcoffee with the review of @vivek-26 in #4126.
⚠️ We don't recommend using CLI flag and HTTP calls at the same time to manage this feature.
Misc
- Dependencies upgrade for security reasons
- CIs and tests
- Add CI to trigger benchmarks in PR (#4102) @Kerollmops
- Improve test-suite.yml for CI failing when disabling tokenization (#4005) @harshau007
- Add more integrations to SDK CI (#4044) @curquiza
- Dependency issue is now created every 6 months (#4065) @curquiza
- Rename benchmark CI file to find it easily in the manifest list (#4125) @curquiza
- Update CI dependencies
- Misc
❤️ Thanks again to our external contributors:
v1.4.2 🦓
v1.4.1 🦓
Bug fixes 🐞
- Improve indexing speed when importing a dump by using a bufreader and bufwriter everytime there is a
grenad<File>
(#4089) @irevoire - Fix bug where search with
distinctAttribute
and pagination withoffset
andlimit
(#4108) @vivek-26
Thanks again to @vivek-26 who fixed an old bug present since v1.3.2 🎉
v1.3.5 🦁
Bug fixes
- Revert the fix on the filters about escaping sequences by @Kerollmops in #4069
\
character at the end of a value in the filter
search parameter. Unfortunately, this bug fix introduced a breaking in the filter
usage: forcing to escape each \
. We shouldn't have released this kind of bug fix in a patch version.
If you are already using v1.3.3 or v1.3.4 and your filter
works without any issue, not need to upgrade to v1.3.5.
v1.3.4 🦁
Bug fix
v1.2.1 🐻❄️
Bug fix
v1.4.0 🦓
Meilisearch v1.4 improves the search result relevancy by introducing three new settings: nonSeparatorTokens
, separatorTokens
and dictionary
.
🧰 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 improvements 🔥
Customize text separators
Meilisearch word segmentation uses a list of characters to separate one word from another. The nonSeparatorTokens
and separatorTokens
index settings allow you to configure this to better fit your dataset.
Add a character to the separator-tokens
list to use it as a word separator:
curl \
-X PUT 'http://localhost:7700/indexes/articles/settings/separator-tokens' \
-H 'Content-Type: application/json' \
--data-binary '["§", "&sep"]'
Add a character to the non-separator-tokens
list when you don't want Meilisearch to use it to separate words:
curl \
-X PUT 'http://localhost:7700/indexes/articles/settings/non-separator-tokens' \
-H 'Content-Type: application/json' \
--data-binary '["@", "#", "&"]'
Done by @ManyTheFish in #3946
Load user-defined dictionaries
Meilisearch word segmentation also relies on language-based dictionaries to segment words. Use the dictionary
index setting to expand the default dictionaries and improve accuracy when working with datasets using domain-specific terms:
curl \
-X PUT 'http://localhost:7700/indexes/articles/settings/dictionary' \
-H 'Content-Type: application/json' \
--data-binary '["J. R. R.", "J.R.R."]'
This feature can be used together with the stopWords
and synonyms
index settings:
{
"dictionary": ["J. R. R.", "J.R.R."],
"synonyms": {
"J.R.R.": ["jrr", "J. R. R."],
"J. R. R.": ["jrr", "J.R.R."],
"jrr": ["J.R.R.", "J. R. R."],
}
}
Done by @ManyTheFish in #3946
Other improvements
Meilisearch better hides your data and no longer shows hidden document's fields in error messages. In case you are trying to sort by using a field that is not sortable but there are some of them that are not displayed either, you will see a message like the following:
Available sortable attributes are: price, stock, <..hidden-attributes>.
Fixes 🐞
- Fix synonyms display (#3946) @ManyTheFish
- Fix thai synonyms (#4033) @Kerollmops
- Fix synonyms with separators (#3994) @ManyTheFish
- Fix the swap index tasks (#4041) @irevoire
- Fix highlighting bug when searching for a phrase with cropping (#4028) @vivek-26
- Empty arrays/objects now return empty instead of null (#3997) @dogukanakkaya
- Fix the stats of the documents deletion by filter (#4053) @irevoire
\
can now be used at the end of thefilter
search parameter values (#4038 and #4043) @Kerollmops
🔴 Usage breaking change following filter
bug fix
filter
search parameter with \
characters in the filter expression.
In this version, we fixed a bug regarding \
in the filter
search parameter expression. Before v1.4.0, the users were not able to express all the filter expression they wanted.
For example, if you add the following documents:
[
{
"id": 1,
"path": "my\\test\\path"
},
{
"id": 2,
"path": "my\\test\\path\\"
}
]
(\\
escaping here is about JSON escaping)
Before v1.4.0, if you wanted to filter on document 2, the filters path = "my\\test\\path\\"
and path = "my\\test\\path\\\"
led to an error.
Now, in v1.4.0, you can express all the possible filter expressions, no matter if the filter contains \
or not. But to reach this, you have to escape all the \
characters in your filter.
Following our example, to finally succeed in filtering on document 2, the filter should be: path = "my\\\\test\\\\path\\\\"
.
👉 If you come from v1.3.X or before, and you used \
in filter
, here is the change to apply: following our example, to filter on document 1, before v1.4.0, you could apply the filter path = "my\\test\\path"
. Now, from v1.4.0, you have to escape the \
and apply the following filter: path = "my\\\\test\\\\path"
.
Two escapings are applied: the JSON escaping and the Meilisearch filter escaping. The JSON unescaping transforms the \\\\
into \\
and the Meilisearch filter unescaping ends up with a single \
.
If you need any help with this change, please feel free to reach us on our Discord.
Misc
- Upgrade Meilisearch dependencies (#3987) @ManyTheFish
- Upgrade CI dependencies (#3871, #3969 and #3968)
- Fix CI benchmarks (#3963) @irevoire
- Removed
borrow
call causing failed nightly tests (#3990) @JannisK89 - Expose Puffin server to profile the indexing process (#3913) @Kerollmops
- Update and fix the CI Test Suite (#3918) @Kerollmops
- Improve CI test suite for manual trigger events (#3989) @curquiza
- Update README.md (#3895 and #3932) @ferdi05 & @Strift
- Fix Homebrew CI (#4016) @Kerollmops
❤️ Thanks again to our external contributors:
- Meilisearch: @dogukanakkaya, @JannisK89, and @vivek-26.