多个字段的弹性搜索聚合
elastic search aggregation on more than one field
我是弹性搜索的新手,我想在它上面实现一个特定的用例。我想要一个多字段总和聚合。我将尝试解释示例:
我在 es 索引中插入了以下对象:
{"a":"aval", "b":"bval", "c":"cval", "aggcount":100}
其中 a、b 和 是字符串,aggcount 是 int。
现在假设我索引了以下记录:
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}
现在我想按字段 a、b 和 c 对记录进行分组并对它们的 aggcount 值求和,因此对于以前的记录我会得到以下结果:
{"a":"aa", "b":"bb", "c":"cc", "count":21}
{"a":"aa", "b":"b", "c":"c", "count":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":17}
有人能告诉我如何实现吗?我尝试了嵌套 significant_terms 和求和聚合,但没有成功。
提前致谢。
使用子聚合:
{
"aggs": {
"aggs_a": {
"terms": {
"field": "a"
},
"aggs": {
"aggs_b": {
"terms": {
"field": "b"
},
"aggs": {
"aggs_c": {
"terms": {
"field": "c"
},
"aggs": {
"summing": {
"sum": {
"field": "aggcount"
}
}
}
}
}
}
}
}
}
}
测试数据及结果:
POST /test_index/test_type/_bulk
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"index":{}}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}
给出:
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"aggs_a": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "aa",
"doc_count": 3,
"aggs_b": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "bb",
"doc_count": 2,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cc",
"doc_count": 2,
"summing": {
"value": 21
}
}
]}},
{
"key": "b",
"doc_count": 1,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "c",
"doc_count": 1,
"summing": {
"value": 1
}
}
]}]}
},
{
"key": "a",
"doc_count": 2,
"aggs_b": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "bb",
"doc_count": 2,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cc",
"doc_count": 2,
"summing": {
"value": 17
}
}
]
}}]}}]}}}
我是弹性搜索的新手,我想在它上面实现一个特定的用例。我想要一个多字段总和聚合。我将尝试解释示例: 我在 es 索引中插入了以下对象:
{"a":"aval", "b":"bval", "c":"cval", "aggcount":100}
其中 a、b 和 是字符串,aggcount 是 int。 现在假设我索引了以下记录:
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}
现在我想按字段 a、b 和 c 对记录进行分组并对它们的 aggcount 值求和,因此对于以前的记录我会得到以下结果:
{"a":"aa", "b":"bb", "c":"cc", "count":21}
{"a":"aa", "b":"b", "c":"c", "count":1}
{"a":"a", "b":"bb", "c":"cc", "aggcount":17}
有人能告诉我如何实现吗?我尝试了嵌套 significant_terms 和求和聚合,但没有成功。 提前致谢。
使用子聚合:
{
"aggs": {
"aggs_a": {
"terms": {
"field": "a"
},
"aggs": {
"aggs_b": {
"terms": {
"field": "b"
},
"aggs": {
"aggs_c": {
"terms": {
"field": "c"
},
"aggs": {
"summing": {
"sum": {
"field": "aggcount"
}
}
}
}
}
}
}
}
}
}
测试数据及结果:
POST /test_index/test_type/_bulk
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":10}
{"index":{}}
{"a":"aa", "b":"bb", "c":"cc", "aggcount":11}
{"index":{}}
{"a":"aa", "b":"b", "c":"c", "aggcount":1}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":12}
{"index":{}}
{"a":"a", "b":"bb", "c":"cc", "aggcount":5}
给出:
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"aggs_a": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "aa",
"doc_count": 3,
"aggs_b": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "bb",
"doc_count": 2,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cc",
"doc_count": 2,
"summing": {
"value": 21
}
}
]}},
{
"key": "b",
"doc_count": 1,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "c",
"doc_count": 1,
"summing": {
"value": 1
}
}
]}]}
},
{
"key": "a",
"doc_count": 2,
"aggs_b": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "bb",
"doc_count": 2,
"aggs_c": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cc",
"doc_count": 2,
"summing": {
"value": 17
}
}
]
}}]}}]}}}