Elasticsearch范围与aggs

时间:2017-09-12 04:38:55

标签: elasticsearch

我希望每个用户文档的平均评分,但根据我不能正常工作。请检查下面给出的代码。

 curl -XGET 'localhost:9200/mentorz/users/_search?pretty' -H 'Content-Type: application/json' -d' 
  {"aggs" : {"avg_rating" : {"range" : {"field" : "rating","ranges" : [{ "from" : 3, "to" : 19 }]}}}}';

{“_ index”:“mentorz”,“_ type”:“users”,“_ id”:“555”,“_ source”:{“name”:“neeru”,“user_id”:555,“email_id” :“abc@gmail.com”,“粉丝”:0,    “跟随”:0,“导师”:0,“被指导者”:0,“basic_info”:“api测试信息”,   “birth_date”:1448451985397,“charge_price”:0,“org”:“cz”,“located_in”:“noida”,“position”:“sw developer”,“exp”:7,“video_bio_lres”:“test bio lres url normal signup“,”video_bio_hres“:”test bio hres url normal signup“,”rating“:[5,4],”expertises“:[1,4,61,62,63]} 这是我的用户文档,我想只筛选那些平均评分范围为3到5的用户。

1 个答案:

答案 0 :(得分:1)

更新答案

我使用脚本进行了查询,希望以下查询适合您。

GET mentorz/users/_search
{
  "size": 0,
  "aggs": {
    "term": {
      "terms": {
        "field": "user.keyword",
        "size": 100
      },
      "aggs": {
        "NAME": {
          "terms": {
            "field": "rating",
            "size": 10,
            "script": {
              "inline": "float var=0;float count=0;for(int i = 0; i < params['_source']['rating'].size();i++){var=var+params['_source']['rating'][i];count++;} float avg = var/count; if(avg>=4 && avg<=5) {avg}else{null}"
            }
          }
        }
      }
    }
  }
}

您可以通过更改if条件“ if(avg&gt; = 4&amp;&amp; avg&lt; = 5)”来更改所需评级范围的范围。