#elasticsearch #elasticsearch-2.0
#elasticsearch #elasticsearch-2.0
Вопрос:
Ниже приведен мой запрос function_score. Я хочу дать дополнительную оценку документам, в которых качество продукта лучше.
Но _score в ответе поиска всегда равен 0. Чего мне не хватает? Спасибо.
Когда я удаляю запрос bool и заменяю его только фильтром терминов, оценка не равна нулю. Я предполагаю, что речь идет о bool запроса, но не могу понять, почему.
Версия Elasticsearch 2.4
{
"from": 0,
"size": 20,
"query": {
"function_score": {
"query": {
"bool": {
"filter": [
{
"bool": {
"should": {
"terms": {
"categories.category1Id": [
63
]
}
}
}
}
]
}
},
"functions": [
{
"gauss": {
"updatedDate": {
"origin": "2016-10-03 05:10:18",
"scale": "0.5h",
"decay": 0.1,
"offset": "1h"
}
}
},
{
"filter": {
"term": {
"productQuality": "EXCELLENT"
}
},
"weight": 7
},
{
"filter": {
"term": {
"productQuality": "HIGH"
}
},
"weight": 5
},
{
"filter": {
"term": {
"productQuality": "MEDIUM"
}
},
"weight": 3
},
{
"filter": {
"term": {
"productQuality": "LOW"
}
},
"weight": 1
}
],
"score_mode": "sum"
}
}
}
Комментарии:
1. Самая первая часть вашего запроса — это фильтр. Фильтры возвращают только постоянную оценку. Вы можете использовать explain api, чтобы увидеть, как работает запрос: elastic.co/guide/en/elasticsearch/reference/current /…
2. @jay прав,
bool/filter
запросы не дают оценки
Ответ №1:
Как сказал @Val.
bool.filter
присваивает оценку 0 всем документам, поскольку запрос оценки не был указан (ссылка).
Если вам нужна оценка, вы можете добавить "must": {"match_all": {}}
ее в свой запрос. match_all
присвоит 1.0 всем документам (ссылка).
Вот ваш запрос с match_all
:
{
"from": 0,
"size": 20,
"query": {
"function_score": {
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [
{
"bool": {
"should": {
"terms": {
"categories.category1Id": [
63
]
}
}
}
}
]
}
},
"functions": [
{
"gauss": {
"updatedDate": {
"origin": "2016-10-03 05:10:18",
"scale": "0.5h",
"decay": 0.1,
"offset": "1h"
}
}
},
{
"filter": {
"term": {
"productQuality": "EXCELLENT"
}
},
"weight": 7
},
{
"filter": {
"term": {
"productQuality": "HIGH"
}
},
"weight": 5
},
{
"filter": {
"term": {
"productQuality": "MEDIUM"
}
},
"weight": 3
},
{
"filter": {
"term": {
"productQuality": "LOW"
}
},
"weight": 1
}
],
"score_mode": "sum"
}
}
}