#elasticsearch
#elasticsearch
Вопрос:
Я хочу получать результаты в определенном порядке, сначала получить точное совпадение фразы (match_phrase), а затем сопоставить любое слово во фразе (match), например, если я ищу «где я могу найти свою учетную запись», я сначала получу документы, содержащие полную фразу «где я могу найти свою учетную запись», а затем документы, содержащие одно или несколько слов «где», «могу», «найти», «моя», «учетная запись»
мой запрос :
GET my_index/_search
{
"query": {
"bool": {
"should": [
{
"match": {"body": "right usage of Localization" }
} ,
{
"match": {"title": "right usage of Localization" }
}
],
"should": [
{
"match_phrase": {"body": "translated" }
},
{
"match_phrase": {"title": "translated" }
}
]
}
}
}
Ответ №1:
Вы можете использовать запрос boost, чтобы увеличить количество документов, соответствующих вашему запросу match_phrase. Вы можете соответствующим образом изменить параметр boost.
Следующий запрос должен сработать для вас
POST phrase_index/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"should": [
{
"match": {
"title": "this is where it should work first"
}
},
{
"match": {
"body": "this is where it should work first"
}
}
]
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"title": {
"query": "this is where it should work first",
"boost": 20
}
}
},
{
"match_phrase": {
"body": {
"query": "this is where it should work first",
"boost": 20
}
}
}
]
}
}
]
}
}
}
Комментарии:
1. Привет! Что, если бы я просто хотел использовать только
match_phrase
для обоих полей? Я попробовал ваш ответ без каких-либоmatch
но у меня это не сработало.2. какую версию ES вы используете?