v0.27 版本的新特性
本月发布的版本带来了对嵌套字段的支持、错别字容错自定义以及新的搜索参数。
本文介绍了主要和重大更改,但你可以在此处查看完整的更改日志。
新特性:嵌套字段支持
Meilisearch 现在完全支持嵌套文档字段,允许你使用点号表示法访问这些字段。
让我们举一个例子。如果你有一个书店索引,你可能希望搜索结果可以按作者的姓氏过滤,而不是按他们的名字过滤。
curl -X POST 'http://127.0.0.1:7700/indexes/books/settings/filterable-attributes' -H 'Content-Type: application/json' --data-binary '[ "author.surname" ]'
你可以在 Meilisearch 中任何可以使用属性的地方使用点号表示法来访问对象属性。例如,你可以访问诸如可排序属性和可搜索属性之类的索引设置,或诸如 attributesToHighlight
之类的搜索参数。
新特性:自定义错别字容错
Meilisearch 具有错别字容错功能!这意味着即使你的搜索包含错别字或拼写错误,我们的引擎也可以解释你的搜索。使用 v0.27,你可以使用新的 更新错别字容错 端点或现有的 更新设置端点来自定义索引的错别字容错设置。
新的错别字容错 API 端点接受一个具有以下属性的 typoTolerance
对象:
enabled
:是否启用错别字容错功能。默认为 truedisableOnAttributes
:在特定文档属性上禁用错别字容错。默认情况下,在所有属性上启用错别字容错。disableOnWords
:在搜索期间给定的一组查询词上禁用错别字容错。默认情况下,错别字容错不会忽略任何单词。minWordSizeForTypos
:Meilisearch 仅接受超过一定大小的单词中的错别字oneTypo
:自定义接受一个错别字的最小字大小。默认为 5 个字符。twoTypos
:自定义接受两个错别字的最小字大小。默认为 9 个字符。
假设你有一个包含许多角色名称的 movie
索引。你可能希望 Meilisearch 永远不要在某些单词中查找错别字,但对其他所有单词都更加宽松
curl --location --request POST 'http://127.0.0.1:7700/indexes/children-movies/settings/typo-tolerance' --header 'Authorization: Bearer <API_KEY>' --header 'Content-Type: application/json' --data-raw '{ "enabled": true, "minWordLengthForTypo": { "oneTypo": 3, "twoTypos": 7 }, "disableOnWords": ["Shrek"], "disableOnAttributes": [] }'
你可以在此处阅读有关错别字容错的更多信息。
新特性:改进的突出显示和裁剪搜索参数
此版本带来了三个新的搜索参数:highlightPreTag
、highlightPostTag
和 cropMarker
。前两个允许你进一步自定义突出显示的搜索词的外观,而最后一个应与 attributesToCrop
结合使用。
使用 attributesToHighlight
时,Meilisearch 默认将匹配的词语用 <em>
和字符串括起来。你现在可以配置这些值,以便使用 highlightPreTag
和 highlightPostTag
包括任何字符串。顾名思义,highlightPreTag
指定突出显示的查询词之前的标签,highlightPostTag
指定突出显示的查询词之后的标签。
同样,使用 attributesToCrop
时,你现在可以将默认的 "…"
cropMarker
更改为用于标记裁剪边界的任何字符串。
在设计允许用户搜索电影数据库的应用程序时,你可能希望更改 cropMarker
和突出显示标签以匹配你的设计
curl --location --request POST '<http://127.0.0.1:7700/indexes/movies/search>' \ --header 'Authorization: Bearer <API_KEY>' \ --header 'Content-Type: application/json' \ --data-raw '{ "q":"shifu", "attributesToCrop":["overview"], "attributesToHighlight":["overview"], "cropLength":10, "highlightPreTag":"<span class=’highlight’>", "highlightPostTag":"</span>", "cropMarker":"[…]" }'
使用上述查询,搜索词 shifu
被括在标签内,裁剪的文本用 […]
标记
{ "id": "50393", "title": "Kung Fu Panda Holiday", "overview": "The Winter Feast is Po's favorite holiday. Every year he and his father hang decorations, cook together, and serve noodle soup to the villagers. But this year Shifu informs Po that as Dragon Warrior, it is his duty to host the formal Winter Feast at the Jade Palace. Po is caught between his obligations as the Dragon Warrior and his family traditions: between Shifu and Mr. Ping.", "_formatted": { "id": "50393", "title": "Kung Fu Panda Holiday", **"overview": "[…]the villagers. But this year <span class=’highlight’>Shifu</span> informs Po that as[…]"** } }
有关更多信息,请查看我们关于搜索参数的指南。
重大更改:`cropLength` 行为
现在,cropLength
搜索参数以单词数而不是字符数指定。
让我们举一个示例查询
curl --location --request POST '<http://127.0.0.1:7700/indexes/movies/search>' \ --header 'Authorization: Bearer <API_KEY>' \ --header 'Content-Type: application/json' \ --data-raw '{ "q":"shifu", "attributesToCrop":["overview"], "cropLength":10 }'
Meilisearch v0.27 返回
{ "id": "50393", "title": "Kung Fu Panda Holiday", "overview": "The Winter Feast is Po's favorite holiday. Every year he and his father hang decorations, cook together, and serve noodle soup to the villagers. But this year Shifu informs Po that as Dragon Warrior, it is his duty to host the formal Winter Feast at the Jade Palace. Po is caught between his obligations as the Dragon Warrior and his family traditions: between Shifu and Mr. Ping.", "_formatted": { "id": "50393", "title": "Kung Fu Panda Holiday", **"overview": "…the villagers. But this year Shifu informs Po that as…",** } }
重大更改:改进的 Docker 工作流程
Docker 现在从不同的工作目录启动:/meili_data
。这简化了你可能想要将快照和转储与 Docker 一起使用的情况。
用法基本保持不变,但不要忘记更新数据路径
docker run -it --rm \ -p 7700:7700 \ -v $(pwd)/meili_data:/meili_data \ getmeili/meilisearch:latest
通过此更改,转储和快照功能应可与 Docker 开箱即用。它不是挂载单独的卷,而是将所有 Meilisearch 数据挂载到 meili_data 目录中。
此更改的另一个后果是,meilisearch
二进制文件已移动到新位置。使用实例选项配置 Meilisearch 时,你现在必须使用 meilisearch
、/meilisearch
或 /bin/meilisearch
,而不是 ./meilisearch。我们建议使用 meilisearch
。
更新后的命令是
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest **meilisearch** --master-key="foobar"
其他更改
- 单词第一个字母的错别字将被视为两个错别字。这减少了错别字容错的搜索空间,从而加快了搜索响应时间
- Meilisearch 现在有一个不可自定义的限制,即每次搜索返回 1000 个文档,以保护数据库免受恶意抓取。
- 我们添加了两个新的实例选项,允许你更好地控制索引期间对机器资源的使用(--max-indexing-memory 和 —-max-indexing-threads)。
- 我们现在支持日语。
- 向非空索引添加新文档的速度得到了提高。
贡献者
非常感谢所有贡献者!没有你们的支持,我们不可能走到今天。本月,我们要特别感谢 @miiton、@djKooks、@mosuka 添加日语支持、@2shiori17 添加对索引期间 RAM 和 CPU 使用情况的新实例选项的支持。
各位,就这些!请记住查看更改日志以获取完整的发行说明,我们下个月再见!