当前位置: 首页 > 面试题库 >

稀疏文档有多种索引或多种映射类型?

澹台胜
2023-03-14
问题内容

我有〜10种不同的文档类型,它们共享10-15个通用字段。但是每种文档类型都有其他字段,其中3个字段最多可以有30-40个其他字段。

我正在考虑为每种文档类型使用不同的映射类型。但是,如果我正确理解了映射的工作方式,ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。

根据本文(索引与类型),ElasticSearch在处理稀疏数据方面不是很好(是吗?),因此对于每种文档类型都有一个单独的索引将是一个论点。但是某些文档类型只包含很少的文档,因此为它们提供单独的索引可能会过大。

我的问题:稀疏文档有多严重?或者,即使某些索引仅包含几个文档,我还是为每种类型使用单独的索引更好吗?


问题答案:

ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。

是的,索引中的不同类型共享相同的映射结构。每个类型在每个文档上都只有一个“ _type”字段,当在特定类型上进行搜索时,该字段将自动用于过滤。

稀疏文件有多糟糕?

从索引到类型引用

一种类型的字段还将消耗该字段不存在的类型的文档资源。 这是Lucene索引的一个普遍问题:它们不喜欢稀疏性。

即使某些索引仅包含几个文档,我还是可以为每种类型使用单独的索引更好吗?

您可能已经知道,每个单独的索引都有其自身的开销,并且类型与稀疏文档的结合不太好。

我会建议

  • 带有少量文档(具有大量稀疏字段)的文档类型应转到单独的索引,这显然是通过将分片的数量减少到最小数量(即1)来实现的。默认情况下,每个索引有5个分片。如果您的文档数量不是那么大,那么使用5个分片就没有意义,这将减少搜索查询的负担。
  • 具有相同重要字段的文档类型应转到具有不同类型的相同索引。根据文档总数,您可能希望增加分片设置的数量。
  • 如果某些文档类型包含大量文档,则可能要为其创建单独的索引。

请记住,您应该在集群中保留合理数量的分片,这可以通过减少不需要高写入吞吐量和/或存储少量文档的索引的分片数量来实现。



 类似资料:
  • 问题内容: 我必须完成一个奇怪的特殊情况。其描述如下: 我必须设计一个地图,其中“ 键 ”始终为 字符串 类型。但是,其中一个键的“ 值 ”可以是 字符串或列表 (取决于特定键可以具有的值数。如果该特定键只有一个值,并且必须如果键包含许多值,则为列表)。如何完成这种情况? 例如:在映射中有2个键,分别是“名称”和“电话号码”。一个人只能有一个名字和多个电话号码。因此,此处的第一个键(即“名称”)的

  • 我有这个json字符串: 当我用Jackson将其转换为映射[字符串,对象]时,开始日期的类型是字符串,我如何告诉Jackson将其转换为日期时间类型?

  • 问题内容: 我有一个用例,其中在同一索引中有两种不同的类型。两种类型都有不同的结构和映射。 我需要使用不同的查询DSL同时查询这两种类型。 如何构建查询DSL以同时查询多个相同索引类型。 我在https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index- multi- type.html上 查看了Elasticsea

  • 问题内容: 我听说有3种加入方式 我不确定确切的名字。谷歌搜索出现了各种术语,例如: 交叉联接,左联接,右联接,内部联接,外部联接,自联接…。 谁能告诉我MySQL中总共存在多少个联接。 问题答案: 联接是

  • 问题内容: 我想创建一个地图,可以将其转换为json对象,例如 但是golang指定使用类型声明地图,因此我可以使用map [string] string或map [string] int。我如何创建上述的json对象? 注意:直到运行时或需要创建json对象时,我才知道需要哪些数据和/或类型。因此,我不能只创建像 问题答案: 您可以随时使用存储任何类型。如包装袋中的文件所述: 若要将JSON解组

  • 设置:两个数据帧;需要将来自df2的数据添加到df1中,如下所述: df1和df2使用相同的四个级别进行多重索引 df1比df2包含更多的行 df1在索引的四个级别中的三个级别中的每个唯一组合都有三个值的副本(以行为单位);也就是说,每行仅相对于第4个级别有所不同 df2在其他3个级别上只与df1部分对齐(df2包含无关行) df2只包含一列 我想将df2的一列中的值添加到df1中三个对应级别匹配