【发布时间】:2015-08-02 07:49:59
【问题描述】:
我希望对我最近观察到的 elastic 1.5.2 中的查询性能进行一些澄清。
我有一个高基数的字符串字段(大约 200,000,000)。 我观察到,如果我使用带有执行提示 global_ordinals_low_cardinality 的简单术语聚合,会发生两件事: 1. 查询返回与 global_ordinals 或 global_ordinals_hash 相同的结果。 2. 查询执行速度明显加快。 (大约是 global_ordinals 的两倍,是 global_ordinals_hash 的 4 倍。
这是查询:
{
"aggs": {
"myTerms": {
"terms": {
"field": "myField",
"size": 1000,
"shard_size": 1000,
"execution_hint": "global_ordinals_low_cardinality"
}
}
}
}
我不明白为什么在这种情况下使用 global_ordinals_low_cardinality 是合法的,因为我的字段具有高基数。所以也许我不明白 global_ordinals_low_cardinality 到底是什么意思?
其次,我有另一个数字字段(长),具有大致相同的基数值。 long 字段的值实际上是上面相同字符串字段的预计算哈希值 (murmur3),我用它来大大加快基数聚合。 在数值字段上运行相同的术语聚合与 global_ordinals_hash 一样糟糕。 其实不管我用什么执行提示,执行时间都是一样的。
那么为什么 global_ordinals_low_cardinality 适用于字符串类型,但不适用于长类型?是因为数值字段根本不需要全局序数吗?
谢谢
【问题讨论】:
标签: performance elasticsearch cardinality