首页 文章

弹性搜索 - 滚动计算

提问于
浏览
1

我有一系列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 回答

  • 1

    它最接近您的#2,但结果会被缓存,因此如果结果在后续查询中非常有用,那将非常快 . Elasticsearch没有办法事先知道你要运行什么查询,所以#1是不可能的,#3会浪费 .

    但是,对于您的示例用例,您可能不需要两个查询,一个就足够了 . 例如,参见stats aggregation将返回count,min,max,average和sum . 将它与terms aggregation(可能是missing aggregation)组合在一起来对 type 字段上的文档进行分组,您将通过单个查询分别计算所有类型的计数和平均值(以及最小值,最大值,总和) .

相关问题