弹性搜索,聚合,如何在估计的最终列表中准确计算

时间:2015-07-29 18:54:27

标签: elasticsearch aggregation

elasticSearch(ES)术语聚合结果是决赛入围者及其计数的近似值。 https://www.elastic.co/guide/en/elasticsearch/reference/1.6/search-aggregations-bucket-terms-aggregation.html

尽管决赛选手不准确,我还是希望得到最终决赛选手的准确数据。我想消除每桶文档计数错误。

我正在考虑发布第二个被决赛选手过滤的查询,因为我知道决赛选手的数量,如果我设置size =#finalists,我可以准确计算它们。

使用上面链接中的示例:在我获得前5个产品:a,z,c,g,b之后,我想找到他们的准确计数:

{
    ...

    "aggregations" : {
        "products" : {
            "doc_count_error_upper_bound" : 46,
            "buckets" : [
                {
                    "key" : "Product A",
                    "doc_count" : 100,
                    "doc_count_error_upper_bound" : 0
                },
                {
                    "key" : "Product Z",
                    "doc_count" : 52,
                    "doc_count_error_upper_bound" : 2
                },
                ...
            ]
        }
    }
}

现在估算了doc_counts,我可以发出第二个由产品ID筛选的查询:

{ 
  ...
  "query": { 
    "filtered": {
      "filter": {
        "terms": {"product": ["Product A", "Product Z","Product C","Product G","Product B"]} 
      }
    }
  }, 
  "aggs":{
    "products":{
      "terms":{
        "field": "product",
        "size": 5, 
        "shard_size": 5
      }
    }
  }
}

我的问题是:

  1. 这能给我正确计算a,z,c,g,b吗?
  2. 有更好的方法吗?在一个查询中,可能是嵌套聚合?
  3. 解析聚合结果以准备过滤器是使用JAVA代码完成的,并且容易出错。这个任务有一个例子吗?或者可以由ES完成吗?
  4. 提前致谢。

0 个答案:

没有答案