我有一系列JSON文档,如 {"type":"A", "value": 2}, {"type":"B"," value":3}, and {"type":"C","value":7}
,我将其提供给弹性搜索 .
假设我想做一个查询以使用 "type": "A"
平均值所有文档
弹性搜索如何计算计数与使用Mongo的方式之间有什么区别?
是弹性搜索:
-
为所有这些类型自动创建"rolling count"并在输入新数据时递增"typeA_sum","typeA_count" "typeA_avg"之类的内容?如果是这样那将是甜蜜的,因为那时它实际上不需要计算任何东西 .
-
它只是在类型上创建索引并实际计算每次运行查询时的总和吗?
-
它在后台执行#2(即预先计算)并且只是更新一些缓存值,所以当查询运行时它的结果很快?
1 回答
它最接近您的#2,但结果会被缓存,因此如果结果在后续查询中非常有用,那将非常快 . Elasticsearch没有办法事先知道你要运行什么查询,所以#1是不可能的,#3会浪费 .
但是,对于您的示例用例,您可能不需要两个查询,一个就足够了 . 例如,参见stats aggregation将返回count,min,max,average和sum . 将它与terms aggregation(可能是missing aggregation)组合在一起来对
type
字段上的文档进行分组,您将通过单个查询分别计算所有类型的计数和平均值(以及最小值,最大值,总和) .