我希望每个用户文档的平均评分,但根据我不能正常工作。请检查下面给出的代码。
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的用户。
答案 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)”来更改所需评级范围的范围。