elasticsearch — запутался в том, как искать элементы, поле которых содержит строку

#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 .