让我们来看看 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 格式。要包含分隔符,请将它们添加到“分隔符”字段。要将某些字符排除为分隔符,请将它们列在“非分隔符”下。

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