AI 驱动的混合搜索正在进行封闭测试。加入等候名单,获取提前体验资格!

前往主页Meilisearch's logo
返回文章
2023 年 9 月 26 日

v1.4 版本有哪些新功能?

Meilisearch v1.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 Cloud

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 文件作为词典。

将自定义词典与停用词和同义词一起使用

自定义词典的引入是对现有功能(如stopWordssynonyms)的强大补充。它们协同作用,可以提高搜索结果的相关性。

假设有一个文学数据库,作者的名字可能会以各种形式或缩写形式出现。这会导致搜索结果分散,使用户难以找到特定作者的作品。例如,考虑一下人们搜索 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.12

Meilisearch 1.12

Meilisearch 1.12 带来了显著的索引速度提升,并引入了新的 API 来禁用前缀搜索和分面搜索,以及检索任务批次。

Laurent Cazanove
Laurent Cazanove2024 年 12 月 23 日
Meilisearch Q4 2024 release wrap-up

Meilisearch 2024 年第四季度发布总结

Meilisearch 第四季度发布包括更快的搜索、对 UI 中设置的更多控制以及新区域。

Maya Shin
Maya Shin2024 年 11 月 27 日
Meilisearch 1.11

Meilisearch 1.11

Meilisearch 1.11 通过关键改进(包括二进制量化)推进了 AI 驱动搜索的稳定性。此版本还根据用户反馈增强了联合搜索功能。

Carolina Ferreira
Carolina Ferreira2024 年 10 月 29 日