#elasticsearch
#elasticsearch
Вопрос:
Этот запрос возвращает нормально только один элемент «steve_jobs».
{
"query": {
"constant_score": {
"filter": {
"term": {
"name":"steve_jobs"
}
}
}
}
}
Итак, теперь я хочу получить всех пользователей с префиксом имени steve_
. Итак, я пытаюсь это:
{
"query": {
"constant_score": {
"filter": {
"term": {
"name": "steve_"
}
}
}
}
}
Это ничего не возвращает. Почему?
Я запутался в том, когда использовать запрос термина / фильтр термина / фильтр терминов / запрос строки запроса.
Комментарии:
1. Привет, мой ответ тебе помог? Не могли бы вы прокомментировать это, пожалуйста.
Ответ №1:
Что вам нужно, так это запрос с префиксом.
Если вы индексируете свой документ следующим образом:
POST /testing_nested_query/class/
{
"name": "my name is steve_jobs"
}
И вы используете анализатор по умолчанию, тогда проблема в том, что термин steve_jobs
будет индексироваться как один термин. Таким образом, ваш запрос Term никогда не сможет найти документы, соответствующие термину steve
, поскольку в индексе нет термина like. Запрос префикса помогает решить вашу проблему путем поиска префикса во всех индексированных терминах.
Вы можете решить ту же проблему, создав свои пользовательские анализаторы (прочитайте это и это) так, чтобы они steve_jobs
сохранялись как steve
и jobs
.