Elasticsearch聚合查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch聚合查询相关的知识,希望对你有一定的参考价值。

参考技术A RestHighLevelClient中分组需要用到AggregationBuilder作为分组条件的构建。我们可以看到AggregationBuilder接口有很多实现类,比如TermsAggregationBuilder、AvgAggregationBuilder、MaxAggregationBuilder、SumAggregationBuilder等常用的统计函数。

为什么要用 subAggregation(AggregationBuilders.topHits("details").size(1))

这里有个坑,如果只用batchId分组并用intrgal求和,那么返回值中只会返回batchId与integral求和后的值这两个字段。这里举个例子,现在统计全国所有学校的总人数,那么我们以school分组,求和了人数。但是我们仍然想知道每个学校属于哪个地区的,这里聚合后就不会返回这些信息,让人很难受。

此时我们就可以使用 subAggregation(AggregationBuilders.topHits("details").size(1)) 来获取一个通用的数据,拿到学校所属的地区名称或者其他学校的上级属性。

我们注意到subAggregation方法是AggregationBuilder的,所以在构建AggregationBuilders的时候,每一个子AggregationBuilder都可以有子AggregationBuilder,如下

这种就是组内再聚合套组内,但是得注意字段的问题,即若你以batchId分组后,那么组内只有batchId与其他的字段,就和第一个注意点一样,导致组内聚合拿不到相关的字段,导致报错。

资料来源:
RestHighLevelClient进阶-聚合操作

Python Elasticsearch 聚合查询

【中文标题】Python Elasticsearch 聚合查询【英文标题】:Python Elasticsearch aggregated query 【发布时间】:2022-01-18 18:19:27 【问题描述】:

我正在努力获得基于查询的聚合响应...例如,在 Kibana 可视化中,在创建包含我需要的聚合和查询的表后,我可以通过进入可视化和检查来查看请求 - > 查看:请求 -> 请求。这给了我整个请求,结构如下:


 "aggs":...,
  "size": 0,
  "fields":[...],
  "script_fields": ,
  "stored_fields": [
    "*"
  ],
  "runtime_mappings": ,
  "_source": 
    "excludes": []
  ,
  "query": 
    "bool":...
  

如何使用 API 获取 Kibana Visualization 中显示的相同数据集? 我尝试将 API 请求字段转换为 es.search() 函数,如下所示:

result = es.search(
index=index,
fields=[ ...],
script_fields=,
stored_fields=[
    "*"
],
runtime_mappings=,
_source=
    "excludes": []
,
query=...,
aggs=...,

size = 0,
scroll = '5m'
)

但是数据没有正确聚合,就像在 Kibana 可视化中一样。 另一个奇怪的行为是,如果我从 es.search() 中完全删除 aggs = ...,它会给我相同的数据集。

注意:我使用的是 elasticsearch 模块 7.16.1

【问题讨论】:

【参考方案1】:

解决了。 查询工作正常,聚合数据在响应的“聚合”部分返回,该部分与“命中”部分分开。

【讨论】:

以上是关于Elasticsearch聚合查询的主要内容,如果未能解决你的问题,请参考以下文章

go-elasticsearch连接查询聚合elasticsearch

ElasticSearch常用操作:查询与聚合篇

Elasticsearch:理解 Elastic Maps 中的 geohash 及其聚合

Elasticsearch:理解 Elastic Maps 中的 geohash 及其聚合

从 NEST C# 嵌套聚合中获取 Elasticsearch 结果

04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作