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