初学elasticsearch哈,我发现ES提供了聚合的一系列方法,不过有个问题在于,聚合的时候,我们求sum,求avg什么的,都是用的_source中的字段,但我不知道怎么利用query中的_score字段,比如这样:
{
"query": {
"match_phrase": {
"usercomment": "重生"
}
},
"aggs": {
"books": {
"terms": {
"field": "book_id"
},
"aggs": {
"avg_rating": {
"avg": {
"field": "_score"
}
}
}
}
}
}
但是结果中:
{
key: ObjectId(5533475d271af03a5bd29df4)
doc_count: 191
avg_rating: {
value: null
}
}
avg_rating的value是null,似乎找不到前面query结果中的_score项目,所以这里请教一下,要引用_source之外的_score字段该怎么办?
{
"query": {
"match_phrase": {
"usercomment": "重生"
}
},
"aggs": {
"books": {
"terms": {
"field": "book_id"
},
"aggs": {
"avg_rating": {
"avg": {
"field": "_score"
}
}
}
}
}
}
但是结果中:
{
key: ObjectId(5533475d271af03a5bd29df4)
doc_count: 191
avg_rating: {
value: null
}
}
avg_rating的value是null,似乎找不到前面query结果中的_score项目,所以这里请教一下,要引用_source之外的_score字段该怎么办?
3 个回复
cq1988114
赞同来自: mulianghai
"aggs": {
"avg_rating": {
"avg": {
"script": "_score"
}
}
}
聚合部分这样写就可以了,如果script报
【scripts of type [inline], operation [aggs] and lang [groovy] are disabled】的错误
就在
就在配置文件elasticsearch.yml里
把
script.inline: on
script.indexed: on
script.engine.groovy.inline.aggs: on
script.engine.groovy.inline.update: on这几行配置加上然后重启els就可以了
我已经使用在了生产环境,是没有问题的。这个问题纠结了几天,终于找到方法了,跟帖在这里。
martindu - 搜披露创始人
赞同来自: mulianghai
我不太理解对这个_score求平均的意义在于?
medcl - 今晚打老虎。
赞同来自: