2017-01-05 96 views
1

我有一個查詢,看起來像這樣(使用Elasticsearch DSL v0.0.11)升級Elasticsearch DSL

s = s.filter(
     'or', 
     [ 
      F('term', hide_from_search=False), 
      F('not', filter=F('exists', field='hide_from_search')), 
     ] 
    ) 

我怎麼會寫,使用版本2.x?當F函數已經走了?

隨着Q功能莫名其妙?

回答

1

你可以這樣說:

q = Q('bool', 
     should=[ 
     Q('term', hide_from_search=False), 
     ~Q('exists', field='hide_from_search'), 
     ], 
     minimum_should_match=1 
) 
s = Search().query(q) 

甚至像這樣簡單:

q = (Q('term', hide_from_search=False) | ~Q('exists', field='hide_from_search')) 
q.minimum_should_match = 1 
s = Search().query(q)