【问题标题】:Multilingual elasticsearch indexing best practice/experiences多语言弹性搜索索引最佳实践/经验
【发布时间】:2014-04-04 21:43:18
【问题描述】:

想知道在 elasticsearch 中用于多语言索引和搜索的最佳实践或经验是什么。我阅读了许多资源,尽我所能提炼出可用的索引选项:

  1. 每种语言的单独索引;

  2. 多语言字段的多字段类型;

  3. 所有可能语言的单独字段。

所以,想知道选择这些选项中的一个或另一个(或我错过的其他选项)的副作用是什么。我想拥有更多的索引并不会真正减慢集群的速度(如果不是大量的语言的话),所以我不确定选择 2 或 3 会得到什么,除了可能更容易维护。

欢迎任何帮助!

【问题讨论】:

  • 在我的用例中,只有一种语言是强制性的,所以我使用了一个索引,对每种已知语言都有分析器,将 _analyzer 放在语言的路径上,并将语言相关内容保存在多字段中:一次用于分析按语言和一次作为“无语言”的默认值。

标签: elasticsearch multilingual full-text-indexing


【解决方案1】:

一个有点老的问题,但无论如何这些信息可能会有所帮助。 索引/映射结构主要取决于您的用例。
您需要同时使用所有语言还是一次只使用一种语言?

  • 选项 1: 例如,多语言网站 - 用户只能以他们选择的当前语言查看和搜索。在这种情况下,我的经验是 index-per-lang 将是一个很好的解决方案,特别是如果您需要能够轻松添加和删除语言。数据量在索引之间分开(性能优势)。为每种语言轻松设置分析器,尤其是当它们的设置仅因语言名称不同时。我个人目前正在为我的一个项目使用此选项

选项 2 和 3 的一般说明:使用其中一个选项,您可以根据您定义评分的语言对文档进行不同的评分每个语言领域。如果您需要添加更多语言,可以向映射添加新字段,但无法删除或更改现有字段。因此,您必须重新索引所有内容并将已删除语言的属性设置为空。您需要为每种新语言添加新的分析器。但需要先关闭索引,修改后再打开。

  • 选项 2:如果您需要同时搜索所有语言,多字段可为您提供最简单的访问方式,因为您可以一次处理其所有子字段:李>
“书名”: { “类型”:“多字段”, “字段”:{ “英语”: { “类型”:“字符串” }, “德语”:{ “类型”:“字符串” }, “意大利语”:{ “类型”:“字符串” }, } }

您可以在此处搜索特定语言(例如:“book_title.english”)或所有语言(使用“book_title”)。您应该小心不要使用“book_title”名称更新字段,而是使用“book_title.[language]”。使用“book_title”将导致使用相同数据更新所有子字段(这可能不是您想要的)

  • 选项 3:完全独立的字段 - 如果您需要按照选项 2 进行搜索,则需要将它们全部放在搜索查询中,因为您不能在索引方面更安全错误地覆盖所有语言

  • 选项 4 的想法 - 使用每种语言的类型:如果您只有一种类型的文档,则可以使用。每种语言可以有不同的字段。如果您有多种文档类型,则无用

【讨论】:

  • 在写这篇文章之前,我一直在考虑类型 4。我的场景包含多个 eshop,每个都有 1 种或多种语言。唯一可搜索的文档类型是产品。我正在考虑以下索引/类型/文档结构:.../eshopName/language/product[]。您认为这可能是仅通过产品搜索来处理多语言电子商店的标准方式吗?但是,我必须能够执行每种语言或我应该能够使用/eshop/en,de,fr/product 获得的所有语言的搜索
  • 不应使用选项 4,因为它会扰乱索引频率,如下所述:elastic.co/guide/en/elasticsearch/guide/current/…
  • 如何设置每个字段的值?
  • 只是阅读对话,当更新文档时,Elasticsearch 内部将删除然后创建一个新文档。因此,选项 2 警告不正确。
【解决方案2】:

如果其他人正在寻找答案,这里是 ElasticSearch 网站上文档的直接链接:https://www.elastic.co/guide/en/elasticsearch/guide/current/mixed-lang-fields.html

【讨论】:

  • 您的链接已过期
【解决方案3】:

我会按照by the Elasticsearch documentation 的建议使用 选项 1(每种语言的单独索引),因为它可以确保您避免词频问题。

如果您的文档包含多种语言,您可以放入多个索引并使用field collapsing query-time 以避免返回相同文档的重复项。

【讨论】:

    【解决方案4】:

    我认为这完全取决于用例。如果我们有多个混合语言(区域设置)的字段,我认为选项 1 不会是最佳选择,因为不可本地化字段会有很多冗余数据。在这种情况下,选项 2 可能会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多