{
"query": {
"custom_filters_score": {
"query": {
"term": {
"name": "user1234"
}
},
"filters": [
{
"filter": {
"term": {
"subject": "math"
}
},
"script": "_score + doc['subject_score'].value"
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果脚本有上面的那么它给出了Error: unresolvable property or identifier: _score
如果脚本是这样的"script": "doc['subject_score'].value"它以与boost相似的方式乘以_score.我想用自定义分数替换elasticsearch _score.
如果我理解你正确你想使用elasticsearch得分,如果主题不是数学,你想使用自定义得分主题是数学.如果您使用的是Elasticsearch v0.90.4或更高版本,则可以使用新function_score查询来实现:
{
"query": {
"function_score": {
"query": {
"term": {
"name": "user1234"
}
},
"functions": [{
"filter": {
"term": {
"subject": "math"
}
},
"script_score": {
"script": "doc[\"subject_score\"].value"
}
}, {
"boost_factor": 0
}],
"score_mode": "first",
"boost_mode": "sum"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在v0.90.4之前,您将不得不求助于使用custom_score和的组合custom_filters_score:
{
"query": {
"custom_score": {
"query": {
"custom_filters_score": {
"query": {
"term": {
"name": "user1234"
}
},
"filters": [{
"filter": {
"term": {
"subject": "math"
}
},
"script": "-1.0"
}]
}
},
"script": "_score < 0.0 ? _score * -1.0 + doc[\"subject_score\"].value : _score"
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者@javanna建议,使用bool查询组合在一起的多个custom_score查询:
{
"query": {
"bool": {
"disable_coord": true,
"should": [{
"filtered": {
"query": {
"term": {
"name": "user1234"
}
},
"filter": {
"bool": {
"must_not": [{
"term": {
"subject": "math"
}
}]
}
}
}
}, {
"filtered": {
"query": {
"custom_score": {
"query": {
"term": {
"name": "user1234"
}
},
"script": "doc['subject_score'].value"
}
},
"filter": {
"term": {
"subject": "math"
}
}
}
}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2267 次 |
| 最近记录: |