我是ElasticSearch世界的新手。我一直在尝试编写简单的请求,我需要在脚本中获取aggs结果以使条件简单。有可能这样做吗? 以下条件仅作为示例。
MessageListenerContainer
答案 0 :(得分:0)
要求是对具有相同字段名称
的多个索引执行sum aggregation现在具有多个索引,您将必须检查该索引中是否存在特定字段 ,并且该字段是否具有相同数据类型。>
我创建了三个索引,只有一个名为num
的字段。
index_1
- num: long
index_2
- num: long
index_3
- num: text
: fielddata: true
还要注意,如果该字段的类型为text
,那么我已经设置了其属性fielddata:true
。但是,如果未设置,则下面的查询将为您提供聚合结果以及错误,提示您无法检索类型为text
的值作为其分析字符串,并且只能使用doc
用于non_analyzed
的字段。
POST /_search
{
"size":0,
"query":{
"bool":{
"filter":[
{
"exists":{
"field":"num"
}
}
]
}
},
"aggs":{
"myaggs":{
"sum":{
"script":{
"source":"if(doc['num'].value instanceof long) return doc['num'].value;"
}
}
}
}
}
fielddata:true
在这种情况下,您需要明确提及要聚合的索引。
POST /_search
{
"size":0,
"query":{
"bool":{
"filter":[
{
"exists":{
"field":"num"
}
},
{
"terms":{
"_index":[
"index_1",
"index_2"
]
}
}
]
}
},
"aggs":{
"myaggs":{
"sum":{
"script":{
"source":"if(doc['num'].value instanceof long) return doc['num'].value;"
}
}
}
}
}
希望这会有所帮助!