前往主页Meilisearch 的标志
返回文章
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 文件作为词典。

将自定义词典与停用词和同义词配合使用

自定义词典的引入,为现有的功能(例如停用词同义词)提供了强大的补充。它们协同作用,提高了搜索结果的相关性。

让我们考虑一个文学数据库,其中作者的姓名可能以各种形式或缩写出现。这会导致搜索结果碎片化,使用户难以找到特定作者的作品。例如,考虑搜索 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() function- JavaScript:虽然 JS 没有专门用于添加斜杠的方法。您可以使用 replace method,如 StackOverflow 所建议。

贡献者

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

总结

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

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

如需其他帮助,请加入我们的开发者社区,在Discord 上。

Meilisearch 1.14

Meilisearch 1.14

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

Carolina Ferreira
Carolina Ferreira2025年4月14日
Meilisearch AI launch week recap

Meilisearch AI 发布周回顾

Meilisearch AI 发布回顾:利用 AI 和个性化改造搜索

Maya Shin
Maya Shin2025年3月28日
Introducing Meilisearch's next-generation indexer: 4x faster updates, 30% less storage

Meilisearch 下一代索引器隆重登场:更新速度提高 4 倍,存储空间减少 30%

2024 版索引器通过并行处理、优化的 RAM 使用和增强的可观察性,彻底改变了搜索性能。查看我们最新版本中的新功能。

Louis Dureuil
Louis Dureuil2025年2月26日