想要更好地控制您的搜索设置?了解我们的灵活的基础设施定价

回到主页Meilisearch 的标志
返回文章

v1.4 有什么新功能?

Meilisearch v1.4 引入了配置自定义文本分隔符和用户定义词典的功能。

2023年9月26日阅读4分钟
Carolina Ferreira
Carolina FerreiraMeilisearch开发者布道师@CarolainFG
What's new in v1.4?

让我们来看看Meilisearch最新更新中的一些最重要的变化。我们将在本文中介绍主要变化,但您也可以在GitHub上查看完整的变更日志

v1.4现已在Meilisearch Cloud上可用。一键升级您的Meilisearch实例,无需停机。

新功能:自定义文本分隔符


为了使字符串数据可搜索,Meilisearch依赖于分隔符,因为它们用于将字符串分割成词元或单词。分隔符的例子包括空格、句点或井号(#)。它们在帮助Meilisearch有效分割文本和提高搜索相关性方面起着至关重要的作用。

Meilisearch带有一个预定义的分隔符列表。然而,这些分隔符并不适用于所有用例。例如,在标签搜索中,井号不应被视为分隔符,而是单词的一部分。

从v1.4开始,Meilisearch允许您自定义分隔符列表以满足您的特定需求。

使用SDK或API

本节显示JavaScript代码示例。有关更多示例,请查看我们的官方SDKAPI参考

向分隔符列表添加字符

要在分隔符列表中包含字符,请更新您的索引的“分隔符词元”设置。

client.index('myIndex').updateSeparatorTokens(['§'])

此请求将节号字符(`§`)的编码版本添加到分隔符词元列表中。

从分隔符列表中删除字符

要从分隔符列表中删除一个或多个字符,请更新您的索引的“非分隔符词元”设置

client.index('myIndex').updateNonSeparatorTokens(['@', '#', '&'])

使用Meilisearch云服务

Meilisearch Cloud上,您可以从索引设置中配置“分隔符词元”。两个字段都接受JSON格式。要包含分隔符,请将其添加到“separators”字段。要将某些字符排除为分隔符,请将它们列在“non-separators”下。

Screenshot of Meilisearch Cloud UI showcasing the 'separator settings' section. It features two fields: one for listing separators and another for listing non-separators.

新功能:自定义词典

本节显示JavaScript代码示例。有关更多示例,请查看我们的官方SDKAPI参考

现在,您可以添加自定义词典以改进 Meilisearch 对特定单词的分割。这在处理领域特定术语(如“Node.js”)或专有名词(如“E. E. Cummings”)时特别有用。

要将单词添加到词典中,请更新您的索引的“词典”设置

client.index('myIndex').updateDictionary(['e. e.', 'e.e.', 'e e'])

Meilisearch Cloud上,您可以通过在索引设置中提供JSON数组来配置“自定义词典”。您也可以上传JSON文件作为词典。

结合停用词和同义词使用自定义词典

自定义词典的引入是现有功能(如停用词同义词)的有力补充。它们共同协同作用,提高搜索结果的相关性。

让我们考虑一个文学数据库,其中作者的名字可能以各种形式或缩写出现。这会导致搜索结果碎片化,使用户难以找到该特定作者的作品。例如,考虑搜索E. E. Cummings作品的不同方式。结合使用自定义词典功能和同义词可以标准化这些姓名变体,从而提高搜索结果的相关性。

结合使用同义词和自定义词典,以下是解决此场景的索引设置示例

{
"dictionary": ["E. E.", "E.E.", "E E"],
"synonyms": {
    "E. E.": [ "E.E.", "E E", "Edward Estlin"],
    "E.E.": ["E. E.", "E E", "Edward Estlin"],
    "E E": ["E. E.", "E.E.", "Edward Estlin"],
    "Edward Estlin": ["E. E.", "E.E.", "E E"]
}

突破性错误修复:改进了带反斜杠的过滤

在v1.4中,我们解决了用户在使用 `filter` 搜索参数表达式末尾的反斜杠 (\) 时面临的一个长期存在的错误。

让我们考虑以下文档

[
  {
    "id": 1,
    "path": "my\test\path"
  },
  {
    "id": 2,
    "path": "my\test\path\"
  }
]

注意:示例中的双反斜杠用于JSON转义。

在v1.4.0之前,尝试使用 path = "my\\test\\path\\"path = "my\\test\\path\\\" 中的任何一个过滤器对第二个文档进行过滤,都会导致错误。

现在,您可以将任何过滤器表达式与反斜杠一起使用。只需确保在过滤器中转义每个 \ 字符即可。

根据我们的示例,要成功过滤第二个文档,过滤器应写为:path = "my\\\\test\\\\path\\\\"

⚠️ 警告:如果您从v1.3.X或更早版本升级,并且之前在过滤器中使用了反斜杠,请注意在v1.4.0中,第一个文档的正确过滤器应该是path = "my\\\\test\\\\path"

应用了两层转义:首先,为JSON进行转义,然后为Meilisearch过滤器进行转义。Meilisearch将 \\\\ 转换回 \\,JSON解析将生成单个 \

考虑使用您的编程语言的内置方法来处理反斜杠:- PHP:addslashes() 函数- JavaScript:虽然JS没有专门用于添加斜杠的方法。您可以使用replace 方法,如StackOverflow上建议的。

贡献者

我们非常感谢所有参与本次发布的社区成员。我们要感谢:@dogukanakkaya@JannisK89@vivek-26 对 Meilisearch 的帮助。我们要特别感谢 mmachatschek 对反斜杠错误的帮助和参与。

结论

v1.4就到这里了!记得查看更新日志以获取完整的发布说明,下次再见!

您可以订阅我们的新闻通讯以了解最新动态。要了解更多关于 Meilisearch 的未来并帮助塑造它,请查看我们的路线图并参与我们的产品讨论

如有其他问题,请加入我们在Discord上的开发者社区。

Meilisearch 1.16

Meilisearch 1.16

Meilisearch 1.16 引入了多模态嵌入和新的 API,用于在实例之间传输数据。

Laurent Cazanove
Laurent Cazanove2025年8月5日
Meilisearch 1.15

Meilisearch 1.15

Meilisearch 1.15 引入了新的拼写容错设置、字符串过滤器比较运算符,并改进了对中文的支持。

Carolina Ferreira
Carolina Ferreira2025年6月10日
Meilisearch 1.14

Meilisearch 1.14

Meilisearch 1.14 引入了新的实验性功能,包括复合嵌入器和嵌入缓存以提高性能。它还增加了核心功能,例如细粒度可过滤属性和按 ID 批量检索文档。

Carolina Ferreira
Carolina Ferreira2025年4月14日
© . This site is unofficial and not affiliated with Meilisearch.