多语言弹性搜索索引最佳实践/经验

ili*_*uve 27 multilingual full-text-indexing elasticsearch

想知道在弹性搜索中使用多语言索引和搜索的最佳实践或经验是什么.我通读了大量资源,尽可能提炼出可用的索引选项:

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

  2. 用于多语言场的多字段类型;

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

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

欢迎任何帮助!

Sho*_*ote 21

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

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

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

  • 选项2:如果您需要一次搜索所有语言,多字段为您提供最简单的访问权限,因为您可以立即处理所有子字段:

    "book_title": {
        "type": "multi_field",
        "fields": {
            "english": {
                "type": "string"
            },
            "german": {
                "type": "string"
            },
            "italian": {
                "type": "string"
            },
        }
    }

在这里,您可以使用特定语言(例如" book_title.english ")或所有语言(使用" book_title ")进行搜索.您应该注意不要使用" book_title "名称更新字段,而是使用" book_title.[language] ".使用" book_title "将导致更新所有具有相同数据的子字段(可能不是您想要的)

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

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

  • 不应使用选项4,因为它会影响索引频率,如下所述:https://www.elastic.co/guide/en/elasticsearch/guide/current/one-lang-docs.html (4认同)