编写搜索对象并使用 $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-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 在 "Multiple queries and filters" 主题中。
$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());
}
我正在使用 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-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 在 "Multiple queries and filters" 主题中。
$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());
}