首页 > 解决方案 > 未根据 ES 查询中传递的大小参数进行聚合

问题描述

我的 ES 查询看起来像这样。我试图获得从 0 到 9 的索引的平均评分。但是 ES 正在取所有记录的平均值。

GET review/analytics/_search
{
  "_source": "r_id",
  "from": 0,
  "size": 9,
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "b_id": [
              236611
            ]
          }
        },
        {
          "range": {
            "r_date": {
              "gte": "1970-01-01 05:30:00",
              "lte": "2019-08-13 17:13:17",
              "format": "yyyy-MM-dd HH:mm:ss"
            }
          }
        },
        {
          "terms": {
            "s_type": [
              "aggregation",
              "organic",
              "survey"
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "s_id": [
                    392
                  ]
                }
              }
            ]
          }
        },
        {
          "term": {
            "status": 2
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "ba_id": []
                }
              }
            ]
          }
        }
      ]
    }
  },
  "sort": [
    {
      "featured": {
        "order": "desc"
      }
    },
    {
      "r_date": {
        "order": "desc"
      }
    }
  ],


   "aggs": {

    "avg_rating": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "term": {
                "rtng": 0
              }
            }
          ]
        }
      },
      "aggs": {

        "rtng": {
          "avg": {
            "field": "rtng"
          }
        }
      }
    },

   "avg_rating1": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "term": {
                "rtng": 0

              }
            }
          ]
        }
      },
      "aggs": {
        "rtng": {
          "avg": {
            "field": "rtng"
         }
        }
      }
    }


  }
 }

查询结果显示 doc_count 为 43 。而我希望它是 9,以便我可以正确计算平均值。我已经指定了上面的尺寸。查询结果似乎计算正确,但聚合结果不正确。

标签: elasticsearch

解决方案


from并且size对聚合没有影响。hits.hits它们只定义数组中将返回多少个文档。

聚合始终在您的query部分中的任何查询选择的整个文档集上运行。

如果您知道“前”九个文档的 ID,则可以在查询中添加一个terms查询,以便仅选择这 9 个文档,从而仅计算这 9 个文档的平均评分。


推荐阅读