如何运行作用于第一个'n`结果的术语聚合

时间:2015-06-03 15:13:37

标签: elasticsearch

我正在对存储在索引中的文档执行术语聚合。我的文件是产品,我正在汇总产品的品牌名称。

# GET /products/_search/
{
  "query": {
    "match": { "name": "iphone 5" }
  },
  "aggs": {
     "brands_name": {
       "terms": {
         "field": "brand",
         "size": 10
       }
     } 
  }
}

正如预期的那样,结果是一桶品牌名称及其doc_counts

{
   "aggregations": {
      "brands_name": {
         "doc_count_error_upper_bound": 577,
         "sum_other_doc_count": 239924,
         "buckets": [
            {
               "key": "Irrelevant Brand 1",
               "doc_count": 8539
            },
            {
               "key": "Irrelevant Brand 2",
               "doc_count": 7616
            },
            ...
         ]
      }
   }
}

通用搜索的点击次数可能非常高。在我的情况下,只有高分的第一个结果是相关性。由于聚合在所有命中(即使是得分较低的命中)上运行,因此常见品牌倾向于始终存在于桶列表中(它们的doc_count很高),而它们可能不是与相关的对应的那个结果

我希望推动我认为是相关品牌的优势。

我的想法是将聚合范围仅限于第一个n文档(每个结果或每个分片可能为n,这无关紧要)。我还没有成功。

我尝试了不适合我的不同方法:

  • 使用带有limit filter的过滤查询。它不起作用,因为它可能排除具有高分的文件
  • 使用min_score。虽然这允许在仅包含高分的范围上运行聚合,但这实际上并不灵活。
  • top_hits aggregation。它不允许子查询,这使得无法在热门命中运行术语聚合。
  • 使用histogram filter按分数汇总结果:它可以通过按小分数间隔分割结果,然后减少结果直到达到大约n个文档。但感觉有点脏和弹性搜索does not seems to support decimal intervals yet

0 个答案:

没有答案