使用elasticsearch_dsl

时间:2016-06-14 22:07:13

标签: python elasticsearch elasticsearch-dsl

我正在尝试构建存储在某些数据结构(可能是树)中的任意嵌套查询。 From the manual我认为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尚未升级。

1 个答案:

答案 0 :(得分:0)

如果您使用的是ES 1.x,则无法使用第二种方式,即产生bool/filter查询的方式。

如果您收到该查询,则表示您正在使用elasticsearch-dsl 2.x或更高版本,which is not correct

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

# Elasticsearch 1.x
elasticsearch-dsl<2.0.0