升级 Elasticsearch DSL

Upgrading 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功能?

你可以这样做:

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)