如何解决Elasticsearch 复合查询和聚合结果不同的 doc_count 值
查询 1:
curl -X POST "localhost:9200/index1-202103/_search?size=0&pretty" -H 'Content-Type: application/json' -d'
{
"query":{
"bool":{
"filter":[
{
"range":{
"date":{
"gte":"20210330","lte":"20210330"
}
}
},{
"term":{
"userid":"16114"
}
},{
"exists":{
"field":"opens"
}
},{
"exists":{
"field":"tags"
}
}
]
}
},"aggs":{
"my_buckets":{
"composite":{
"sources":[
{
"from_domain_wise":{
"terms":{
"field":"domain"
}
}
},{
"msp_wise":{
"terms":{
"field":"msp"
}
}
},{
"fromaddress_wise":{
"terms":{
"field":"fromaddress"
}
}
},{
"tag_wise":{
"terms":{
"field":"tags"
}
}
},{
"rate_over_time":{
"date_histogram":{
"field":"opens.time","interval":"1h"
}
}
}
]
}
}
}
}'
查询 2
curl -X POST "localhost:9200/index1-202103/_search?size=0&pretty" -H 'Content-Type: application/json' -d'
{
"query":{
"bool":{
"filter":[
{
"range":{
"date":{
"gte":"20210330",{
"tag_wise":{
"terms":{
"field":"tags"
}
}
}
]
},"aggs":{
"rate_over_time":{
"date_histogram":{
"field":"opens.time","interval":"1h"
}
}
}
}
}
}'
两个结果都给出了具有不同计数的日期直方图的输出。当我检查时,我的发现是 Query1 正在计算 opens.time (FORMAT: 2021-03-30 15:15:45) 字段重复值,而 Query2 正在计算 opens.time 如果单个文档中的小时相同。
例如:如果 doc 包含 opens: [{ "time": "2021-03-30 15:20:25" },{ "time": "2021-03-30 15:45:30" }]
则 Query1 返回 doc_count
为 2,而 Query2 返回 doc_count
为 1。
尽管两个查询的目标相同,但任何人都可以解释为什么我的查询表现如此。我想要 Query2 使用 Query1 给出的结果。
PS:Elasticsearch 版本是 7.10
解决方法
两个查询都“有目标”,但请注意您应用 date_histogram
的位置:
在第一个查询中它用作 composite sub-aggregation,在第二个查询中用作 composite value source。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。