我正在尝试构建存储在某些数据结构(可能是树)中的任意嵌套查询。
从手册中我收集到该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 尚未升级。