编写搜索对象并使用 $search->getQuery() 时出现意外的 BoolQuery



我正在使用ongr/elasticsearch-dsl捆绑包来构建我的查询,我需要在不同的地方编写搜索对象。当我在同一个地方做时,它会按预期工作。

use ONGRElasticsearchDSLSearch;
use ONGRElasticsearchDSLQueryCompoundBoolQuery;
use ONGRElasticsearchDSLQueryTermLevelTermsQuery;
$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-Objects。

$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());
}

相关内容

  • 没有找到相关文章

最新更新