一尘不染

Elasticsearch:对同一数据记录的每种语言使用单独的索引

elasticsearch

我有一个数据记录,其中有一个名为标题的字段。记录可能同时具有不同的标题语言。这样的记录包含其他字段,其值不会随语言而变化,因此在以下两个示例中未列出它们:

Record #1:
Title (English): Hello

Record #2:
Title (English): World
Title (Spanish): mundo

当前,标题有四种可能的语言:英语,西班牙语,法语和中文。随着系统的发展,将支持更多的语言。

我是Elasticsearch的新手。我认为每种语言都有单独的索引。因此对于记录2,我将创建两个Elasticsearch文档(每种语言一个),并将文档发送到与其语言相对应的索引。

在索引,更新,删除和搜索方面,这是一个好的/可接受的设计吗?任何问题?

对于这种设计,我认为它至少具有以下好处:

  • 我可以轻松决定每种语言需要多少个分片
  • 我可以确定索引(语言)的碎片数量和位置
  • 当系统破坏或重建现有数据的索引时,我可以轻松地为新语言添加索引。
  • 该系统可以最大程度地利用分布式计算能力

感谢您的输入!

最好。


阅读 235

收藏
2020-06-22

共1个答案

一尘不染

您的解决方案可能会正常工作,但是如果您开始允许多语言搜索,则可能会遇到重复文档的问题。

每个字段具有多个可能的值可能是最佳选择,例如:

  • title.engligsh
  • title.spanish

您可以为每种语言使用完全不同的分析规则,而无需复制文档。

这种方法将进一步允许您为具有自己分析规则的文档的任何字段添加新标题。请注意,最后我检查了一下,如果使用全新的自定义分析器,则需要打开/关闭索引才能使其生效,这将导致几秒钟的停机时间。

我将尝试寻找一些时间以端到端的例子来扩展这个答案。

2020-06-22