簡體   English   中英

組合搜索對象並使用 $search->getQueries() 時出現意外的 BoolQuery

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM