当前位置:   article > 正文

ElastaticSearch----top_hits,es获取聚合的相关文档结果_es 对tophits字段排序

es 对tophits字段排序

使用场景

使用es聚合时,有时还需要获取query(或filter) 的相关文档结果(数据)。

比如统计各个地区编码的营业额,得到了聚合的统计结果,还想知道query结果中对应的地区名称,并根据营业额进行排序,

这时可以使用 top_hits。

top_hits属性

top_hits有以下的属性:

  1. from - 从第几个结果开始获取。
  2. size - 每个桶返回的query结果的数量。默认情况下,返回前三个匹配的结果。
  3. sort - 根据字段进行排序。默认情况下,按主查询的分数排序。

top_hits的DSL

格式如下:

  1. {
  2. "size" : 0,
  3. "query" : { },
  4. "aggregations" : {
  5. "自己命名的聚合名称" : {
  6. "terms" : {
  7. "field" : "聚合字段",
  8. "size" : 10000,
  9. "order" : {
  10. "_term" : "asc"
  11. }
  12. },
  13. "aggregations" : {
  14. "hits" : {
  15. "top_hits" : {
  16. "sort": [
  17. {
  18. "排序字段": {
  19. "order": "desc"
  20. }
  21. }
  22. ],
  23. "from" : 0,
  24. "size" : 5
  25. }
  26. },
  27. "自己命名的聚合统计的名称" : {
  28. "sum" : {
  29. "field" : "聚合统计字段"
  30. }
  31. }
  32. }
  33. }
  34. }
  35. }

示例如下:

  1. {
  2. "size" : 0,
  3. "query" : { },
  4. "aggregations" : {
  5. "agg_area" : {
  6. "terms" : {
  7. "field" : "area",
  8. "size" : 10000,
  9. "order" : {
  10. "_term" : "asc"
  11. }
  12. },
  13. "aggregations" : {
  14. "hits" : {
  15. "top_hits" : {
  16. "sort": [
  17. {
  18. "amount": {
  19. "order": "desc"
  20. }
  21. }
  22. ],
  23. "from" : 0,
  24. "size" : 5
  25. }
  26. },
  27. "area_sum" : {
  28. "sum" : {
  29. "field" : "amount"
  30. }
  31. }
  32. }
  33. }
  34. }
  35. }

top_hits的java代码

java代码格式:

  1. public static String getTopHitsDSL() {
  2. SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource();
  3. AggregationBuilder areaCodeAgg = AggregationBuilders.terms(自己命名的聚合名称).field(聚合字段)
  4. .order(Terms.Order.aggregation("_term", true)).size(10000)
  5. .subAggregation(AggregationBuilders.topHits("hits").sort(排序字段).size(5))
  6. .subAggregation(AggregationBuilders.sum(自己命名的聚合统计的名称).field(聚合字段));
  7. return searchSourceBuilder.query().aggregation(areaCodeAgg).size(0).toString();
  8. }

如下所示:

  1. public static String getTopHitsDSL() {
  2. SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource();
  3. AggregationBuilder areaCodeAgg = AggregationBuilders.terms("agg_area").field("area")
  4. .order(Terms.Order.aggregation("_term", true)).size(10000)
  5. .subAggregation(AggregationBuilders.topHits("hits").sort("amount").size(5))
  6. .subAggregation(AggregationBuilders.sum("area_sum").field("amount"));
  7. return searchSourceBuilder.query().aggregation(areaCodeAgg).size(0).toString();
  8. }

参考资料:

http://itindex.net/detail/60468-elasticsearch-top-hits

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/633721
推荐阅读
相关标签
  

闽ICP备14008679号