当前位置: 首页 > 知识库问答 >
问题:

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

尉迟兴修
2023-03-14

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

Record #1:
Title (English): Hello

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

目前有四种可能的语言为标题:英语,西班牙语,法语和汉语。当系统增长时,将会有更多的语言支持。

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

在索引、更新、删除和搜索中,这是一个好的/可接受的设计吗?有什么问题吗?

对于这种设计,我相信至少有好处:

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

感谢您的任何意见!

最好的。

共有1个答案

田俊爽
2023-03-14

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

每个字段有多个可能的值可能更理想,例如:

  • title.engligsh
  • 标题.西班牙语

您可以对每种语言有完全不同的分析规则,而不必重复文档。

这种方法还允许您使用自己的分析规则向文档添加一个新的title.whather字段。但是,请注意,上次我检查过,如果您使用一个全新的自定义分析器,您需要打开/关闭索引才能使其生效,这将导致几秒钟的停机时间。

我会试着找一些时间用一个端到端的例子来扩展这个答案。

 类似资料:
  • 问题内容: 我有一个数据记录,其中有一个名为标题的字段。记录可能同时具有不同的标题语言。这样的记录包含其他字段,其值不会随语言而变化,因此在以下两个示例中未列出它们: 当前,标题有四种可能的语言:英语,西班牙语,法语和中文。随着系统的发展,将支持更多的语言。 我是Elasticsearch的新手。我认为每种语言都有单独的索引。因此对于记录2,我将创建两个Elasticsearch文档(每种语言一个

  • 问题内容: 我有一个表格,其中有一个父/子关系,其中每个孩子的列数据都需要连接到父母中。 这是一些示例数据,该数据已损坏,因此父记录(Id = 96) 为 NULL 。关系是通过字段进行的: 数据应如下所示: 编辑: 后代级别可以是任何深层次,但深子级后代需要更新为主要的父级 。拿下面的最后两个记录( Id = 100 和 Id = 101 )都链接到97。因为 Id = 97 IS NOT NU

  • ,日志记录将进入一个文件; (路径)/service_name/service_name.log 我想用logback复制这种行为,但在logback.xml配置中获取“logger”名称时遇到了真正的困难。它可以在log encoder.pattern中看到,即“%d%-5level%logger{35}-%msg%n”。

  • 我目前正在开发一个应用程序,它将为不同的目的生成两个不同的日志文件。因为我是log4j2新手,所以无法实现它。这是我的配置文件(log4j2.xml): 我不确定我是否用了正确的方法。下面是我的java方法,它试图使用log4j2进行日志记录 谢谢

  • 如何在按分页顺序聚合术语字段后获取记录。到目前为止,我有这个: 我对此进行了研究,有人说,通过使用复合聚合或分区,这是可能的。但我不知道我如何才能真正做到这一点。 我也查看了bucket\u sort,但我似乎无法使其发挥作用: 我对这件事很在行。请帮帮我。谢谢

  • 问题内容: 我想从ElasticSearch索引返回最近的记录(前1个),类似于下面的sql查询; 能做到吗? 问题答案: 你有_timestamp在您的文档映射启用? 您可以在此处检查映射: 如果是这样,我认为这可能会获得最新的信息: