У меня есть поле в 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
, и другое без.
Мне по-прежнему любопытно, есть ли более простое / более общее решение без разделения на два поля.