Elasticsearch 5.2版。
我在top_hits
聚合中使用filter
聚合来获取与不同过滤器匹配的存储桶结果集,但是我不想在任何两个存储桶中看到相同的结果,即使它与两个过滤器集都匹配也是如此。有没有办法做到这一点?这是一个坏主意吗?
查询示例:
GET _search
{
"size": 0,
"aggs": {
"block 1": {
"filter": {
"bool": {
"must": [{
"terms": {
"property1": [
"value1",
"value2"
]
}
}
]
}
},
"aggs": {
"block 1_hits": {
"top_hits": {
"size": 10
}
}
}
},
"block 2": {
"filter": {},
"aggs": {
"block 2_hits": {
"top_hits": {
"size": 10
}
}
}
}
}
}
最佳答案
k,考虑到对问题的评论,我将提出一个与您正在寻找的答案不完全相同的答案,但是在这种情况下,这似乎是一件好事。
由于我们在这里只讨论每个查询10个请求,因此我建议对多个请求进行 flex 处理,但有一个警告:不要将它们串联,从性能 Angular 来看,这将不理想。实际上,在一系列查询中根本不必排除任何ID!
异步发出这些请求,但每个请求的页面大小都越来越大。 10、20、30、40等。然后在代码中,从Block 2的Block 1中删除项目,依此类推。
这样,如果“第2块”与第1块有100%的重叠,则您可以删除这10个项目,而第2块仍具有所需的10页面大小。
编辑:根据@dotybear的评论:无需发出多个请求,只需在每个后续查询中增加页面大小(假设早期的“块”具有重复项的优先级)
关于elasticsearch - 如何在Elasticsearch聚合存储桶中删除重复的结果文档?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52508017/