Elasticsearch Aggregation:如何对Bucket Order进行排序

时间:2015-12-10 06:42:32

标签: elasticsearch

ES版本:1.5(Amazon Elasticsearch)

我的目标:在某个字段上使用重复数据删除搜索结果。我目前正在进行一些处理重复数据删除的聚合研究。所以,我的结果是一个带有1个大小桶的列表桶。但是,我找不到订购桶列表的方法。

当前查询:

curl -XGET "http://localhost:9200/myidx/product/_search?search_type=count" -d '{
   "size": 2, 
   "query": {
      "function_score": {
         "field_value_factor": {
           "field": "relevance",
           "factor": 2.0
         },
         "query":  { "term": { "title": "abcd" } },
         "score_mode": "multiply",
         "boost_mode": "multiply"
      }
   },
   "aggs": {
      "unique": {
         "terms": {
           "field": "groupid",
           "size": 2
         },
         "aggs": {
           "sample": {
             "top_hits": {
               "size": 1
             }
           }
         }
      }
   }
}'

结果:

{ ...
"aggregations": {
    "unique": {
      "doc_count_error_upper_bound": 1,
      "sum_other_doc_count": 39,
      "buckets": [
        {
          "key": 717878424,
          "doc_count": 14,
          "sample": {
            "hits": {
              "total": 14,
              "max_score": 45.856163,
              "hits": [
                {
                  "_index": "myidx",
                  "_type": "product",
                  "_id": "89531",
                  "_score": 45.856163,
                  "_source": { ... }
                }
              ]
            }
          }
        },
        {
          "key": 717878423,
          "doc_count": 8,
          "sample": {
            "hits": {
              "total": 8,
              "max_score": 68.78424,
              "hits": [
                {
                  "_index": "myidx",
                  "_type": "product",
                  "_id": "89517",
                  "_score": 68.78424,
                  "_source": { ... }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

我希望看到第二个桶的max_score = 68.78424作为第一个。这可能吗?

如果聚合不是推荐的解决方案,请说明。

1 个答案:

答案 0 :(得分:3)

是的,您可以通过在最高文档分数上添加另一个子聚合并按该分数对unique terms聚合进行排序来实现。

curl -XGET "http://localhost:9200/myidx/product/_search?search_type=count" -d '{
   "size": 2, 
   "query": {
      "function_score": {
         "field_value_factor": {
           "field": "relevance",
           "factor": 2.0
         },
         "query":  { "term": { "title": "abcd" } },
         "score_mode": "multiply",
         "boost_mode": "multiply"
      }
   },
   "aggs": {
      "unique": {
         "terms": {
           "field": "groupid",
           "size": 2,
           "order": {
              "max_score": "desc"
           }
         },
         "aggs": {
           "max_score": {
             "max": {
               "script": "doc.score"
             }
           },
           "sample": {
             "top_hits": {
               "size": 1
             }
           }
         }
      }
   }
}'