想知道在弹性搜索中使用多语言索引和搜索的最佳实践或体验是什么。我读了很多资源,尽可能提炼索引的可用选项是:
每种语言单独索引;
多语言字段的多字段类型;
所有可能语言的单独字段。
所以,想知道选择这些选项中的一个或另一个(或者其他一些我错过的)的副作用。我想有更多的索引并没有真正减慢群集的速度(如果它不是一些大量的语言),所以不确定从选择2或3可以得到什么,除了可能更容易维护。
欢迎任何帮助!
答案 0 :(得分:19)
有点老问题,但无论如何,信息可能会有所帮助。 索引/映射结构主要取决于您的用例 您是否需要同时使用所有语言,或者只使用一种语言?
选项2和3的常规说明 :使用其中一个选项,您可以根据语言对文档进行不同的评分,因为您可以定义评分每个语言领域。如果需要添加更多语言,可以向映射添加新字段,但无法删除或更改现有字段。因此,您必须重新索引所有内容,并将已删除语言的属性设置为空。您需要为每种新语言添加新的分析器。但是需要先关闭索引并在更改后打开它。
"book_title": { "type": "multi_field", "fields": { "english": { "type": "string" }, "german": { "type": "string" }, "italian": { "type": "string" }, } }
在这里,您可以使用特定语言(例如:" book_title.english ")或所有语言进行搜索(使用" book_title &#34)。您应该小心不使用" book_title "更新字段名称,但使用" book_title。[语言] "。使用" book_title "将导致更新所有具有相同数据的子字段(可能不是您想要的)
选项3 :完全独立的字段 - 如果您需要按照选项2进行搜索,则需要将它们全部放在搜索查询中,在索引方面更安全,因为您不能错误地覆盖所有语言
选项4的想法 - 使用每种语言类型:如果您只有一种类型的文档,则可以使用它。每种语言可以有不同的字段。如果您有多种文档类型
答案 1 :(得分:1)
如果其他人正在寻找答案,可以直接链接到ElasticSearch网站上的文档:https://www.elastic.co/guide/en/elasticsearch/guide/current/mixed-lang-fields.html
答案 2 :(得分:0)
我会按照建议by the Elasticsearch documentation使用选项1 (每种语言使用单独的索引),因为它可以确保避免词频出现问题。
如果您的文档包含多种语言,则可以放入多个索引并使用field collapsing查询时间来避免返回同一文档的重复项。
答案 3 :(得分:0)
我认为这完全取决于用例。我认为,如果我们有多个具有混合语言(区域设置)的字段,那么选项1将不是最佳选择,因为对于不可本地化的字段,将会有很多冗余数据。在这种情况下,选项2可能更好。