想知道在Elasticsearch中用于多语言索引和搜索的最佳实践或经验是什么。我通读了许多资源,并且尽可能地提炼出可供索引的可用选项包括:

  • 每种语言的单独索引;
  • 多语言字段的多字段类型;
  • 所有可能的语言的单独字段。

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

    任何帮助都欢迎!

    最佳答案

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

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

    选项2和3的一般说明:使用这些选项之一,您可以根据语言为文档评分,从而可以为每种语言字段定义评分。如果需要添加更多语言,则可以向映射添加新字段,但是无法删除或更改现有字段。因此,您将必须重新索引所有内容并将已删除语言的属性设置为空。您将需要为每种新语言添加新的分析器。但是需要先关闭索引,然后再进行更改。
  • 选项2 :如果您需要一次以所有语言进行搜索,则多字段可让您最轻松地访问,因为您可以一次寻址其所有子字段:

  • “书名”: {
    “type”:“multi_field”,
    “字段”:{
    “英语”: {
    “type”:“字符串”
    },
    “德语”:{
    “type”:“字符串”
    },
    “意大利语”:{
    “type”:“字符串”
    },
    }
    }

    您可以在此处搜索特定语言(例如:“book_title.english”)或所有语言(使用“book_title”)。您应该小心而不是来使用“book_title”名称而不是“book_title。[language]”来更新字段。使用“book_title”将导致使用相同的数据更新所有子字段(这可能不是您想要的)
  • 选项3 :完全独立的字段-如果您需要按照选项2进行搜索,则需要将所有字段都放在搜索查询中,因为不能错误地覆盖所有语言
  • ,因此在索引编制方面更安全
  • 选项4的想法-使用每种语言键入:如果您只有一种类型的文档,则可以使用。每种语言可以有不同的字段。如果您有多种文档类型
  • ,则无用

    关于elasticsearch - 多语种Elasticsearch索引最佳实践/经验,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22153606/

    10-16 12:29
    查看更多