Search code examples
elasticsearchdslquerydslelasticsearch-dslelasticsearch-dsl-py

Pythons Elasticsearch-DSL filter for exactly one match from list of values


I saw some realted posts but none of them match my exact issue.

Using Python 2.7 with Elasticsearch-dsl (6.3, that is also my Elasticsearch version).

I want to do something like,

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

This syntax doesn't work though.

I wish to get back all documents with service_name == 'exmp_name1' OR service_name == 'exmp_name2'

I prefer to use the filter context rather then query context as from my understanding it's faster and scoring really isn't important to me, just an absolute match (or mismatch).

How can I achieve this behavior?

Thanks


Solution

  • Ok. All I needed is to filter by terms rather then match.

    The terms syntax supports several values.

    Working code:

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