ElasticSearch / Lucene - примените помои к НЕ - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть поле в ElasticSearch, которое представляет собой массив строк.

Я ищу конкретные фразы в этом массиве, используя разрыв приращения позиции и фразу_slop .

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

Примеры:

Индексированное поле: ['a b 1', 'c d', 'e f 3']

Базовое совпадение фразы:

  • "a c" ничего не соответствует (желаемое поведение)
  • "b a" соответствует, когда phrase_slop достаточно высоко (желаемое поведение).

Отрицание:

  • "a b" NOT 1 NOT 3 ничего не соответствует (желаемое поведение)
  • `" a b NOT 1 NOT 3 "ничего не соответствует (НЕ желаемое поведение)

Можно ли как-нибудь использовать совпадение фразы с фразой slop AND отрицанием на основе position ?

Текущее решение :

Для моего конкретного случая использования, я думаю, я нашел обходной путь:

Подробнее:

  • Существует ограниченное количество значений, против которых нужно NOT.
  • В отличие от примера вопроса, существует довольно небольшое количество значений массива, которые содержат значения NOT.
  • Иногда мне не нужно добавлять NOT s. Однако эти времена должны быть понятны из пользовательского ввода.

Итак, мое решение состоит в том, чтобы использовать 2 поля: одно со значениями массива, против которых я хотел NOT, и другое без.

Мне по-прежнему любопытно, есть ли более простое / более общее решение без разделения на два поля.

...