ElasticSearch:同一索引中多种类型的性能影响

时间:2013-12-11 18:11:30

标签: elasticsearch

我们将一些多态文档子类型存储在一个索引中(例如,我们假设我们存储的车辆包含汽车,面包车,摩托车和蝙蝠车的子类型)。

目前,这些子类型的字段中存在> 80%的通用性(e.x制造商,车轮数量,作为传输模式的令人敬畏的排名)。

标准情况是搜索所有类型,但有时用户会希望将结果过滤到子类型的子集:仅查找带有...的汽车。

在将这些子类型建模为不同的ElasticSearch类型与使用某些特定于应用程序的字段来区分子类型的单一类型建模时,在搜索/索引时产生了多少开销(如果有的话)?

我已经查看过几个相关的答案,但找不到我确切问题的答案。

非常感谢!

1 个答案:

答案 0 :(得分:3)

不应该有任何明显的开销。

如果您将所有内容保持在同一类型下,则可以通过在对象上添加“类”字段并在搜索中的此字段中添加条件来按子类型过滤结果。

将不同类建模为不同ES类型的一个很好的理由是,在具有相同名称的字段类型之间可能存在冲突。

也就是说,假设你的“car”类有一个“颜色”字段,它包含整数,而你的“van”类也有一个“颜色”字段,但这个字段是一个字符串。 (愚蠢的例子,我知道,没有更好的主意)。

Elasticsearch保存类型的映射(数据“模式”)。因此,如果您在同一类型下索引“car”和“van”,则会出现字段类型冲突。类型中的字段可以具有一种特定类型。如果将字段设置为整数,然后尝试将字符串索引到其中,则会失败。

这是关于如何使用Elasticsearch类型的主要指导原则之一 - 将类型视为不会发生冲突的特定数据模式。