gpt4 book ai didi

php - 组成搜索对象并使用$ search-> getQueries()时发生意外的BoolQuery

转载 作者:行者123 更新时间:2023-12-02 22:23:23 24 4
gpt4 key购买 nike

我正在使用ongr / elasticsearch-dsl bundle 包构建查询,并且需要在不同位置组成搜索对象。当我在同一位置进行操作时,它可以按预期工作。

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

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

关于php - 组成搜索对象并使用$ search-> getQueries()时发生意外的BoolQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com