Неожиданный BoolQuery при создании поискового объекта и использовании $ search- & gt; getQueries ()

Я использую пакет ongr /asticsearch-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]}}]}}}

Что я делаю не так? Или как я могу расширить свой поиск и избежать этого пустого запроса?

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]