Below is a query that I would like to build using elasticsearch-dsl-py, but I don't know how to do it.
GET /my_index/_search { "query": { "filtered": { "filter": { "bool": { "must": [ { "term": { "status": "published" } }, { "or": { "filters": [ { "range": { "start_publication": { "lte": "2015-02-17T03:45:00.245012+00:00" } } }, { "missing": { "field": "start_publication" } } ] } }, { "or":{ "filters": [ { "range": { "end_publication": { "gte": "2015-02-17T03:45:00.245012+00:00" } } }, { "missing": { "field": "end_publication" } } ] } } ] } } } } }
Using elasticsearch-dsl-py, this is as close as possible, but it is not the same. '|' the statement turns into "should" sentences instead of "OR".
client = Elasticsearch() now = timezone.now() s = Search(using=client, index="my_index" ).filter( "term", status=PUBLISHED ).filter( F("range", start_publication={"lte": now}, ) | F("missing", field="start_publication") ).filter( F("range", end_publication={"gte": now}, ) | F("missing", field="end_publication") ) response = s.execute()
python boolean elasticsearch dsl
Joost VanDorp
source share