[英]Unexpected BoolQuery when compose search object and use $search->getQueries()
我正在使用 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]}}]}}}
我做錯了什么? 或者如何擴展我的搜索並避免空查詢?
不要使用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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.