2014-03-03 78 views
14

想知道在elasticsearch中多语言索引和搜索中使用的最佳实践或经验是什么?我读了很多资源,尽我所能提取索引的可用选项有:多语言弹性搜索索引最佳实践/体验

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

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

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

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

欢迎任何帮助!

+0

只有一种语言是强制性的,所以我使用一个索引,对每种已知语言都使用分析器,将分析器放在语言的路径上,并将语言相关内容保存在多个字段中:一次用于通过语言进行分析,一次用作“无语言”的默认语言。 – cfrick

回答

13

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

  • 选项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 - 利用类型,每个语言的:可以,如果使用你只有一种类型的文件。每种语言可以有不同的字段。不是有用的,如果你有多个文档类型

+0

在我来到这篇文章之前,我正在考虑类型4。我的场景包含多个网上商店,每个商店都有一种或多种语言。唯一可搜索的文档类型是该产品。我正在考虑索引/类型/文档结构:'.../eshopName/language/product []'。你认为这可能是一个标准的方式来处理多语种的商店只是产品搜索?然而,我必须能够按照语言或所有语言执行搜索,而我应该可以通过'/ eshop/en,de,fr/product'获得所有语言的搜索结果 – ulkas

+2

不应该使用选项4,因为它会导致混乱索引频率,如下所述:https://www.elastic.co/guide/en/elasticsearch/guide/current/one-lang-docs.html – Lumbendil

+0

如何设置每个字段的值? – IamIC