2017-02-13 5 views
2

私はongr/elasticsearch-dslバンドルを使用してクエリを作成しています。私は同じ場所でそれをするとき、それは期待どおりに動作します。

use ONGR\ElasticsearchDSL\Search; 
use ONGR\ElasticsearchDSL\Query\Compound\BoolQuery; 
use ONGR\ElasticsearchDSL\Query\TermLevel\TermsQuery; 

$search = new Search(); 
$bool = new BoolQuery(); 
$search->addQuery($bool); 

$bool->add(new TermsQuery('id', [1])); 
$bool->add(new TermsQuery('id2', [2])); 

echo json_encode($search->toArray()); 

結果は次のようになります。

{"query":{"bool":{"must":[{"terms":{"id":[1]}},{"terms":{"id2":[2]}}]}}} 

は今、私は別の方法に、検索オブジェクトを渡すと、私のTermQuery-オブジェクトを追加しませんしてみてください。

$search = new Search(); 
$bool = new BoolQuery(); 
$search->addQuery($bool); 

$mapper->map($search); 

//--- 
public function map(search) { 
    $bool = $search->getQueries(); 
    $bool->add(new TermsQuery('id', [1])); 
    $bool->add(new TermsQuery('id2', [2])); 

    echo json_encode($search->toArray()); 
} 

結果はほぼ同じですが、余分な空のBoolQueryがあります。

{"query":{"bool":{"must":[{"bool":[]},{"terms":{"id":[1]}},{"terms":{"id2":[2]}}]}}} 

私は間違っていますか?または、検索を拡張してその空のクエリを避けるにはどうすればよいですか?

答えて

2

BoolQueryを使用しないでください。クエリを追加すると、自動的にBoolQueryが作成されます。詳細はこちら:http://docs.ongr.io/ElasticsearchDSL/HowTo/HowToSearch "複数のクエリとフィルタ"のトピック

$search = new Search(); 

$mapper->map($search); 

//--- 
public function map($search) { 
    $search->add(new TermsQuery('id', [1])); 
    $search->add(new TermsQuery('id2', [2])); 

    echo json_encode($search->toArray()); 
} 
+0

素晴らしいです!どうもありがとう! – Daniel

関連する問題