升级Elasticsearch DSL

时间:2017-01-05 22:44:58

标签: python-2.7 elasticsearch elasticsearch-dsl

我的查询看起来像这样(使用Elasticsearch DSL v0.0.11)

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

我如何使用v2.x编写?当F函数消失了吗?

以某种方式使用Q函数?

1 个答案:

答案 0 :(得分: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)