У меня есть существующий запрос, который предлагает предложения по почтовому индексу с запросом, как показано ниже (я жестко закодировал его почтовым индексом как T0L )

 "suggest":{
    "suggestions":{
      "text":"T0L", 
      "completion":{
        "field": "postcode.suggest"
      }
    }
  }

Это работает нормально, но он ищет некоторые результаты, в которых город содержит нулевые значения. Поэтому мне нужно отфильтровать адреса, где город не равен нулю.

Итак, я последовал решению на this и подготовил такой запрос.

{
 "query": {
   "constant_score": {
     "filter": {
       "exists": {
         "field": "city"
       }
     }
   }
 }, 
  "suggest":{
    "suggestions":{
      "text":"T0L", 
      "completion":{
        "field": "postcode.suggest"
      }
    }
  }
}

Но, к сожалению, это не дает требуемых адресов, где почтовый индекс содержит T0L , скорее я получаю результаты, где почтовый индекс начинается с A1X . Поэтому я считаю, что он запрашивает все адреса, в которых находится город, и игнорирует запрос подсказки завершения. Не могли бы вы сообщить мне, в чем ошибка. Или может как правильно написать.

3
Naibedya Kar 11 Сен 2018 в 16:32

1 ответ

Лучший ответ

Невозможно отфильтровать предложения во время запроса, потому что completion подсказчик использует FST (специальная структура данных в памяти, которая создается во время индексации) для молниеносного поиска.

Но вы можете изменить свое сопоставление и добавить контекст для вашего суггестера. Основная идея контекста, который он также заполняет во время индексации вместе с полем completion и, следовательно, может использоваться во время запроса с запросом suggest.

2
Alexey Prudnikov 12 Сен 2018 в 08:08