查询聚合结果

时间:2018-06-28 10:22:19

标签: elasticsearch

是否可以在单个Elasticsearch查询表达式中执行两个聚合,然后对由该聚合产生的结果集执行布尔查询?

例如,考虑以下数据集和数据转换。我要执行弹性:

1)初始数据集(Elasticsearch索引中的内容):

{ "pivot_id":  "A", "version": 1, "value": "x" }
{ "pivot_id":  "A", "version": 2, "value": "y" }
{ "pivot_id":  "A", "version": 3, "value": "z" }
{ "pivot_id":  "B", "version": 1, "value": "w" }
{ "pivot_id":  "B", "version": 2, "value": "k" }

2)通过ivot_id进行汇总:

{ "pivot_id":  "A", "version": 1, "value": "x" ] // bucket: A
{ "pivot_id":  "A", "version": 2, "value": "y" }
{ "pivot_id":  "A", "version": 3, "value": "z" }

{ "pivot_id":  "B", "version": 1, "value": "w" } // bucket: B
{ "pivot_id":  "B", "version": 2, "value": "k" }

3)选择每个ivot_id /存储桶的最新版本:

{ "pivot_id":  "A", "version": 1, "value": "x" }
{ "pivot_id":  "B", "version": 1, "value": "w" }

4)然后执行一个简单的布尔查询,进行分页并在3)中对数据集进行排序

也就是说,我如何在单个Elasticsearch查询表达式中执行上述数据转换的序列/管道1->2->3->4

我尝试了以下方法,但没有成功,因为执行query bool是为了满足aggs的原因,而不是在{{1}产生的结果集上使用}。 也就是说,弹性正在执行:trx_id_group aggs,而不是我想要的4->1->2->3

是否有一种方法可以强制将布尔查询应用于聚合结果(agss-> query)而不是(query-> aggs)之上?

我正在使用Elasticsearch 6.2.4。

我失败的尝试:

1->2->3->4

对于该查询,我期望没有结果,因为文档GET /index/_search { "from": 0, "size": 10, "query": { "bool": { "filter": [{ "terms": { "value.keyword": ["y", "w"] } }] } }, "aggs": { "trx_id_group": { "terms": { "field": "trx_id.keyword" }, "aggs": { "most_recent_per_group": { "top_hits": { "size": 1, "sort": [{ "version": { "order": "desc" } }] } } } } }, "sort": [{ "version": "asc" }] } A的最新版本没有By值。但是查询正在获取事件wA.v2并将其分组。

最后一个提示:在B.v1中,以上查询为:

SQL

我尝试使用Elasticsearch的{​​{3}},但不幸的是,尚不支持SELECT * FROM (SELECT a.PIVOT_ID, a.VERSION, a.VALUE FROM ES_INDEX AS a INNER JOIN (SELECT PIVOT_ID, MAX(VERSION) AS VERSION FROM ES_INDEX GROUP BY PIVOT_ID) AS b ON a.PIVOT_ID = b.PIVOT_ID AND a.VERSION = b.VERSION) AS TRX_ID_MOST_RECENT_VERSION WHERE // ... your custom SEARCH clauses here ... 操作的翻译。

谢谢大家! :)

0 个答案:

没有答案