我的索引具有类似日志的结构:每当发生事件时我都会插入一个文档版本。例如,以下是索引中的文档:
{ "key": "a", subkey: 0 }
{ "key": "a", subkey: 0 }
{ "key": "a", subkey: 1 }
{ "key": "a", subkey: 1 }
{ "key": "b", subkey: 0 }
{ "key": "b", subkey: 0 }
{ "key": "b", subkey: 1 }
{ "key": "b", subkey: 1 }
我正在尝试在ElasticSearch中构造一个查询,它基本上等同于以下SQL查询:
SELECT COUNT(*), key, subkey
FROM (SELECT DISTINCT key, subkey FROM t)
这个查询的答案显然是
(1, a, 0)
(1, a, 1)
(1, b, 0)
(1, b, 1)
我如何在Elasticsearch中复制此查询?我想出了以下内容:
GET test_index/test_type/_search?search_type=count
{
"aggregations": {
"count_aggr": {
"terms": {
"field": "concatenated_key"
},
"aggs": {
"sample_doc": {
"top_hits": {
"size": 1
}
}
}
}
}
}
concatenated_key
是key
和subkey
的串联。此查询将为每个(密钥,子密钥)组合创建一个存储桶,并从每个存储桶返回一个样本文档。但是,我不知道如何汇总_source
。
会感激任何想法。谢谢!