title: How do I create an "OR" filter using elasticsearch-dsl-py?
body: <p>The query below is what I would like to construct using elasticsearch-dsl-py, but I do not know how to do it.</p>
  
  <pre><code>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"
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }
  }
  </code></pre>
  
  <p>Using elasticsearch-dsl-py, this is as close as I can get, but it is not the same. The '|' operator is turns into 'should' clauses, instead of 'OR'.</p>
  
  <pre><code>    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()
  </code></pre>