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}}]}}

何らかの理由で AWS がまだアップグレードされていないため、ElasticSearch のバージョン 1 を使用していることに注意してください。

4

1 に答える 1

0

ES 1.x を使用している場合、2 番目の方法、つまりbool/filterクエリを生成する方法は使用できません。

そのクエリを取得した場合、elasticsearch-dsl 2.x 以降を使用していることを意味しますが、これは正しくありません

requirements.txtこれを含めるようにファイルを変更する必要があります

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