いくつかのデータ構造(おそらくツリー)に格納された任意のネストされたクエリを構築しようとしています。
マニュアルから、クエリのタイプは特別な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}}]}}
何らかの理由で AWS がまだアップグレードされていないため、ElasticSearch のバージョン 1 を使用していることに注意してください。