0

我正在尝试构建存储在某些数据结构(可能是树)中的任意嵌套查询。 从手册中我收集到该filter类型的查询是特殊类型的Bool查询,因此

s = Search()
s = s.filter('terms', tags=['search', 'python'])

s = Search()
s = s.query('bool', filter=[Q('terms', tags=['search', 'python'])])

是相同的。我在我的查询中尝试了这个,但有些东西不能正常工作。

第一个查询有效并返回预期结果:

s = Search(using=client, index='index')
s = s.filter('term', some_field=some_value)
print(s.to_dict())

>>> {'query': {'filtered': {'filter': {'term': {'some_field': 'some_value'}}, \
     'query': {'match_all': {}}}}}

模仿查询中的示例似乎不起作用:

s = Search(using=client, index='index')
s = s.query(Q('bool', filter=[Q('term', some_field=some_value])]))
print(s.to_dict())
>>> {'query': {'bool': {'filter': [{'term': {some_field': some_value}}]}}

请注意,我使用的是 ElasticSearch 版本 1,因为出于某种原因 AWS 尚未升级。

4

1 回答 1

0

如果您使用的是 ES 1.x,那么您不能使用第二种方式,即产生bool/filter查询的方式。

如果您收到该查询,则表示您使用的是 elasticsearch-dsl 2.x 或更高版本,这是不正确的

您需要修改requirements.txt文件以包含此

# Elasticsearch 1.x
elasticsearch-dsl<2.0.0
于 2016-06-15T03:39:30.590 回答