Эластичный поиск - поисковый запрос api

У меня есть индекс с названием "банк" (добавлен по этой ссылке) с примерами данных, например:

{
      "account_number" : 25,
      "balance" : 40540,
      "firstname" : "Virginia",
      "lastname" : "Ayala",
      "age" : 39,
      "gender" : "F",
      "address" : "171 Putnam Avenue",
      "employer" : "Filodyne",
      "email" : "[email protected]",
      "city" : "Nicholson",
      "state" : "PA"
}

Когда я выполняю запрос основного поиска это работает для некоторых ключей, а для некоторых нет. Например,

GET /bank/_search
{
    "query" : {
        "term" : {"age" : 39}
    }
}

Вышеуказанный запрос работает, а нижеследующий не возвращает никакого ответа (0 ответов)

GET /bank/_search
{
    "query" : {
        "term" : {"firstname" : "Virginia"}
    }
}

В чем причина вышеизложенного? Что нужно сделать, чтобы получить результат на основе любых ключей


person Neo    schedule 14.01.2018    source источник
comment
Это может быть связано с запросами String: Discussion.elastic.co/ т / строка-запроса-не-работает-правильно / 78690   -  person Arel Sapir    schedule 14.01.2018
comment
Что такое mapping поля firstname?   -  person sunkuet02    schedule 14.01.2018
comment
@ArelSapir: Может быть, путаница для некоторых ключей (со строковыми значениями) работает, но для большинства не работает. Даже пример, приведенный в поиске тела запроса, работает нормально: elastic.co/guide/en/elasticsearch/reference/current/.   -  person Neo    schedule 14.01.2018


Ответы (1)


Для строковых полей строка будет проходить через стандартный анализатор, который переводит ее в нижний регистр. Например, стандартный анализатор превратит строку «Quick Brown Fox!» в термины [quick, brown, fox]. Вот почему ваш запрос не работает.

Вы можете решить эту проблему, используя:

  • Установка полей как not analyzed
  • Вместо этого используйте запрос match, который понимает, как было проанализировано поле.
person Tanu    schedule 14.01.2018