Фильтр Pythons Elasticsearch-DSL для ровно одного совпадения из списка значений - PullRequest
0 голосов
/ 04 ноября 2018

Я видел несколько опубликованных сообщений, но ни одна из них не соответствует моей точной проблеме.

Использование Python 2.7 с Elasticsearch-dsl (6.3, это также моя версия Elasticsearch).

Я хочу сделать что-то вроде

s = Search(using=elastic_conn, index='my_index').filter("match", service_name=['exmp_name1', 'exmp_name2'])

Хотя этот синтаксис не работает.

Я хочу вернуть все документы с помощью service_name == 'exmp_name1' ИЛИ service_name == 'exmp_name2'

Я предпочитаю использовать контекст фильтра, а не запросить контекст, поскольку, насколько я понимаю, он быстрее, и оценка для меня действительно не важна, просто абсолютное совпадение (или несовпадение).

Как мне добиться этого поведения?

Спасибо

1 Ответ

0 голосов
/ 04 ноября 2018

Хорошо. Все, что мне нужно, это фильтровать по terms, а не match.

Синтаксис terms поддерживает несколько значений.

Рабочий код:

s = Search(using=elastic_conn, index='audit').filter("terms", service_name=['exmp_name1', 'exmp_name2'])

...