我正在尝试创建一个ElasticSearch聚合查询,该查询可以在所有摄取的文档中生成总和或均值。
文档的格式-
GET _search
{
"query": {
"query_string": {
"query": "cold"
}
},
"size": 0,
"aggs": {
"temperature": {
"date_histogram":{
"field" : "date_1",
"interval" : "month"
},
"aggs":{
"temperature_agg":{
"terms": {
"field": "feedback.value"
}
}
}
}
}
}
通过使用以下请求,我可以使用“ date_1”创建所有“ feedback.value”的总和-
{
"mappings": {
"catalog_item": {
"properties": {
"feedback":{
"type":"nested",
"properties":{
"date_2":{
"type": "date",
"format":"YYYY-MM-DD"
},
"value": {
"type": "float"
},
"comment": {
"type": "text"
}
}
}
}
}
}
}
但是,我需要基于“ feedback.date_2”对所有汇总的文档生成相同的查询。我不确定ElasticSearch是否可以解决这种聚合或如何进行聚合。任何指导都会有所帮助
[编辑] 映射文件(我仅定义嵌套项目,ES自己识别其他字段)
unitOfWork_stateUnderTest_expectedBehaviour
答案 0 :(得分:1)
您需要使用nested documents和sum aggregation。
这是一个可行的示例:
样品映射:
PUT test
{
"mappings": {
"doc": {
"properties": {
"feedback": {
"type": "nested"
}
}
}
}
}
添加示例文档:
PUT test/doc/1
{
"date_1": "2017/08/07",
"feedback": [
{
"date_2": "2017/08/07",
"value": 28,
"comment": "not cold"
},
{
"date_2": "2017/08/09",
"value": 48,
"comment": "a bit chilly"
},
{
"date_2": "2017/09/07",
"value": 18,
"comment": "very cold"
}
]
}
基于date_2计算总和。
GET test/_search
{
"size": 0,
"aggs": {
"temperature_aggregation": {
"nested": {
"path": "feedback"
},
"aggs": {
"temperature": {
"date_histogram": {
"field": "feedback.date_2",
"interval": "month"
},
"aggs": {
"sum": {
"sum": {
"field": "feedback.value"
}
},
"avg": {
"avg": {
"field": "feedback.value"
}
}
}
}
}
}
}
}