Elasticsearch повышает важность точного соответствия фразе
Есть ли способ в поиске elastics для повышения важности точной фразы, появляющейся в документе?
Например, если бы я искал фразу "веб-разработчик", и если бы слова "веб-разработчик" появились вместе, они были бы увеличены на 5 по сравнению с "веб" и "разработчиком", появляющимися отдельно по всему документу. Таким образом, любой документ, содержащий "веб-разработчика" вместе, будет отображаться первым в результатах.
Ответы
Ответ 1
Вы можете комбинировать разные запросы вместе с помощью запроса bool, и вы также можете отличить их. Скажем, у вас есть регулярный запрос соответствия для обоих терминов, независимо от их позиций, а затем фразовый запрос с более высоким повышением.
Что-то вроде следующего:
{
"query": {
"bool": {
"should": [
{
"match": {
"field": "web developer"
}
},
{
"match_phrase": {
"field": "web developer",
"boost": 5
}
}
],
"minimum_number_should_match": 1
}
}
}
Ответ 2
В качестве альтернативы answer javanna вы можете сделать что-то подобное с предложениями must
и should
в запросе bool
:
{
"query": {
"bool": {
"must": {
"match": {
"field": "web developer",
"operator": "and"
}
},
"should": {
"match_phrase": {
"field": "web developer"
}
}
}
}
}
Неподтвержденный, но я считаю, что предложение must
здесь будет соответствовать результатам, содержащим как "веб", так и "разработчик", а предложение should
будет забивать фразы, соответствующие "веб-разработчику" выше.
Ответ 3
Вы можете попробовать использовать rescore, чтобы выполнить точное совпадение фразы по вашим первоначальным результатам. Из документов:
"Rescoring может помочь повысить точность, переупорядочивая только верхние (например, 100 - 500) документы, возвращаемые этапами запроса и post_filter, используя вторичный (обычно более дорогостоящий) алгоритм вместо того, чтобы применять дорогостоящий алгоритм ко всем документам в индекс."
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html
Ответ 4
Я использовал ниже пример запроса в моем случае, который работает. Он дает точные + нечеткие результаты, но точные повышаются!
{ "query": {
"bool": {
"should": [
{
"match": {
"name": "pala"
}
},
{
"fuzzy": {
"name": "pala"
}
}
]
}}}
Ответ 5
Я думаю, что его поведение по умолчанию уже с запросом соответствия или "оператором". Сначала будет фильтровать фразу "веб-разработчик", а затем такие термины, как "web" или "develeper". Хотя вы можете повысить свой запрос, используя приведенные выше ответы. Исправьте меня, если я ошибаюсь.