#elasticsearch #elasticsearch-query
Вопрос:
У меня есть хранилище данных эластичного поиска, как показано ниже, и мне нужно написать несколько поисковых запросов по этим данным с точным совпадением и точным совпадением *(подстановочный знак)
[
{
"id": "123",
"name": "test123 abc bct",
"externalObj": {
"id": "abc 123"
}
},
{
"id": "124",
"name": "test124 abc bct",
"externalObj": {
"id": "abc 124"
}
}
]
в настоящее время я написал запрос, как показано ниже,
{
"query": {
"query_string": {
"fields": [
"name^5",
"id",
"externalObj.*"
],
"query": "(test124 abc)",
"default_operator": "AND"
}
}
}
Приведенный выше запрос отлично работает с точным совпадением, но мне также нужно получить данные для частичного поиска и максимальную релевантную оценку для ответа. эта штука не работает с этим запросом.
например: «запрос»: «test124 ab»
Кто-нибудь может мне помочь в решении вышеуказанной проблемы ?
Ответ №1:
Есть 2 варианта достижения того, чего вы хотите. Вы можете выбрать один из них для использования:
- Установите
default_operator
значениеOR
(или просто удалите его, так как значение по умолчанию равноOR
).
{
"query": {
"query_string": {
"fields": [
"name^5",
"id",
"externalObj.*"
],
"query": "test124 a"
}
}
}
- Измените свой запрос на
test124 a*
{
"query": {
"query_string": {
"fields": [
"name^5",
"id",
"externalObj.*"
],
"query": "test124 a*",
"default_operator": "AND"
}
}
}
Комментарии:
1. с вашим предложением точное совпадение работает нормально, и частичное совпадение также работает нормально для одного сценария, он работает для «test124 abc*», но не для «test124 ab*».
2. Это странно. И то, и другое прекрасно работает для меня. Сохранил ли ты свое
default_operator
«какAND
«, когда пыталсяtest124 ab*
?3. да, если мы удалим default_operator: «И», он получит ненужные результаты с правильными объектами, а также без правильного порядка сортировки для ввода запроса, который мы задали
4. просто я хочу получить результат «test124 abc bct» для «запроса»: «test124 a»
5. Я обновил свой ответ примерами запросов. Пожалуйста, попробуйте их. Для обоих вариантов я возвращаюсь
test124 abc bct
.