2
時發生意外的BoolQuery我正在使用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]}}]}}}
我在做什麼錯了?或者,我該如何擴展我的搜索範圍並避免使用空查詢?
太棒了,它的工作原理!非常感謝! – Daniel