Чтобы сделать любое поле более важным, чем другие, вы можете установить его усиление на более высокое значение.Так что если fieldA^4
и fieldB^1
, это означает, что fieldA
в 4 раза важнее, чем fieldB
.Поэтому вы можете задать более высокое значение усиления для поля name
, чтобы сделать его более важным для оценки.
Для второй точки документ со значением поля name
как john
будет иметь более высокий балл, чем с документом со значением поля name
как george john
(при условии, что другие поля имеют те же данныев обоих документах) .Причина, по которой вы получаете второй документ (джордж джон) выше в результате, заключается в том, что вы увеличили все поля с отрицательным значением.
Таким образом, чтобы удовлетворить обе ваши точки
- дает более высокий импульс для
name
- делает повышение для всех полей как положительное значение.
Таким образом, запрос должен выглядеть следующим образом:
{
//"explain": true,
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"name^4.0",
"id^1.0",
"address.city^1.0",
"address.street^1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
Чтобы больше узнать о том, как оценка для соответствующего документа рассчитывается по эластичности, вы можете использовать "explain": true
в своем запросе.Это даст подробные шаги в результате, сделанные эластичным для расчета балла.