Фразовый запрос на не проанализированном поле не работает - PullRequest
0 голосов
/ 05 января 2019

У меня есть индекс поиска товаров с полем «productOptions», который содержит сериализованный JSON, то есть он может содержать либо пустой массив для продуктов без опций, либо массив с опциями для продуктов с опциями продукта:

  • []
  • [{ optionId: "", ... }]

Когда я пытаюсь выполнить запрос +productOptions: "[]" в Luke (используя StandardAnalyzer), я не получаю никаких совпадений. У меня сложилось впечатление, что StandardAnalyzer будет искать не проанализированные поля, пока существует точное совпадение, поэтому я не понимаю, почему я не получаю никаких обращений. Однако, если я переключаюсь на KeywordAnalyzer, я делаю , получаю хиты, но не могу использовать KeywordAnalyzer, так как я запрашиваю параметры продукта как часть более сложного поискового запроса, который требует StandardAnalyzer.

Как мне написать запрос, который находит все товары без опций (т.е. productOptions == [])?

Примечание : я не контролирую процесс индексации, поэтому не могу контролировать индексируемые значения.

1 Ответ

0 голосов
/ 09 января 2019

Проблема в следующем: StandardAnalyzer эффективно удаляет [] и оставляет это поле просто пустой строкой.

Это делает поиск позже той же самой строки [] - невозможно найти что-либо.

Одной из возможностей найти эти «пустые» строки является поиск -field_name:[* TO *], что означает следующее:

field_name:[* TO *] - это хакерский обходной путь для поиска любых документов, которые содержат что-либо, кроме пустого в этом поле, и - эффективно отрицает это условие и в конечном итоге запрашивает все документы, которые содержат пустые данные в field_name

...