问题描述
我有下一个查询:
curl -X POST "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"bool" : {
"must" :
{ "term" :
{ "message" :
{
"value": "message","boost": 2.0
}
}
},"should" :
{ "term" :
{ "message" :
{
"value": "message","boost": 2.0
}
}
}
}
}
}
'
我从此响应中获得的_score
是_score
的2倍(我得到的没有范围(must
/ should
之一)) />
我的问题是,是否有办法将操作更改为多个操作,而不是例如
-代替_score + _score
我会得到_score * _score
解决方法
您可以使用function score query
一个工作示例(使用脚本分数):
_score
将乘以_score
映射
PUT index
{
"mappings": {
"properties": {
"message": {
"type": "keyword"
}
}
}
}
插入文档
POST index/_doc/1
{
"message":"message"
}
POST index/_doc/2
{
"message":"message"
}
没有script_score
GET index/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"term": {
"message": {
"value": "message"
}
}
}
],"should": [
{
"term": {
"message": {
"value": "message"
}
}
}
]
}
}
}
}
}
结果:
"hits" : [
{
"_index" : "index","_type" : "_doc","_id" : "3","_score" : 1.3862944,"_source" : {
"message" : "message"
}
},{
"_index" : "index","_id" : "4","_source" : {
"message" : "message"
}
}
]
使用script_score
GET index/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"term": {
"message": {
"value": "message"
}
}
}
],"should": [
{
"term": {
"message": {
"value": "message"
}
}
}
]
}
},"script_score": {
"script": {
"source": "_score"
}
}
}
}
}
结果
"hits" : [
{
"_index" : "index","_score" : 1.921812,"_source" : {
"message" : "message"
}
}
]