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的Bl​​ock 1中删除项目,依此类推。
这样,如果“第2块”与第1块有100%的重叠,则您可以删除这10个项目,而第2块仍具有所需的10页面大小。

编辑:根据@dotybear的评论:无需发出多个请求,只需在每个后续查询中增加页面大小(假设早期的“块”具有重复项的优先级)

关于elasticsearch - 如何在Elasticsearch聚合存储桶中删除重复的结果文档?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52508017/

10-11 06:59
查看更多