2016-06-14 14 views
0

いくつかのデータ構造体(おそらくツリー)に格納された任意のネストされたクエリを構築しようとしています。elasticsearch_dslを使用して手動でフィルタクエリを作成する

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

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

が同じになるように From the manual私は、クエリの filterタイプは Boolクエリの特別な種類があることを収集します。 私はこれを私のクエリで試しましたが、何かが正しく動作していません。

は、この最初のクエリが動作し、期待される結果を返します:私はのでElasticSearchのバージョン1を使用しています

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

注:動作するようには思えないクエリの例を模倣

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': {}}}}} 

を何らかの理由でAWSがまだアップグレードされていません。

答えて

0

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

これは、elasticsearch-dsl 2.x以降、which is not correctを使用していることを意味します。あなたが送信されたリンクから、この

# Elasticsearch 1.x 
elasticsearch-dsl<2.0.0 
+0

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

は、「ライブラリーは、1.1以降のすべてのElasticsearchのバージョンと互換性がありますが、あなたは、一致メジャーバージョンを使用する必要があります。」私は既に使用しています。 'bool/filter'が' 1.x'バージョンではサポートされていないとは言わない – meto

+0

'bool/filter'がES 2.xで導入されたので、1.xバージョンではサポートされないことを保証できます – Val

+0

これで運がいい? – Val

関連する問題