一尘不染

在ElasticSearch 5聚合中最适合使用的数据类型是什么:数字或关键字?

elasticsearch

在Elasticsearch索引中,我有几个字段正在引用主要类别的ID(例如,sector_id,country_id等)。

这些字段仅用于过滤(使用术语过滤器)和用于创建术语聚合的存储桶(以及其他)。

当前,它们中的每一个都使用最小的适当数字数据类型(例如,byte,short等)。

这是用于重型聚合的最佳数据类型吗?

还是应该使用关键字数据类型?

在此先感谢您的任何建议!


阅读 399

收藏
2020-06-22

共1个答案

一尘不染

如果这些字段的值是数字,则应使用数字类型,如果它们是字符串,则应使用关键字类型。

要记住的一件事是,如果您想在某个时候在这些字段上运行range查询和/或range聚合,则应该优先使用数字类型,以便可以对这些值进行数字排序而不是按词法排序。

例如:如果您有国家ID(例如1、2、3,…,10、11、12,…,20,…)并且映射为关键字(即字符串),则如果您运行range使用对其进行查询(或聚合)from: 1, to: 3,您还将得到11、12、13等,因为在字符串世界中,11在词法上小于3。

2020-06-22