[英]How to mix $query->andFilterWhere and $query->query in Yii2 elasticsearch 6
我将yii2系统从yii2-elasticsearch 2.0更新到2.1,并将elasticsearch软件包从2.2.1更新到6.2.1。 在旧系统中,我可以按如下方式混合$query->andFilterWhere
和$query->query
(搜索方法在派生自yii\\elasticsearch\\ActiveRecord
):
public function search($params)
{
$query = self::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
$query->andFilterWhere([
'languageCode' => \Yii::$app->locale->languageCode,
]);
$queryPart = [];
if (!empty($this->term)) {
$queryPart['filtered']['query']['multi_match'] = [
// ES6: $queryPart['bool']['must']['multi_match'] = [
'query' => $this->term,
'operator' => 'and',
'type' => $this->getQueryType($this->term),
'fields' => [
'name_*',
'meta_description_*'
]
];
}
if (!empty($queryPart)) {
$query->query($queryPart);
}
return $dataProvider;
}
它可以与ES 2.2.1一起正常使用,但是现在andFilterWhere
独立于序列覆盖$query->query
。 如果拆下两个部分中的一个,则另一个过滤器将正常工作,但不能一起工作。 任何想法?
您必须使用布尔查询,并将查询的所有部分放在一个“查询”对象中……
query => [
bool => [
must => [
multi_match => [
'query' => $this->term,
'operator' => 'and',
'type' => $this->getQueryType($this->term),
'fields' => [
'name_*',
'meta_description_*'
]
]
]
filter => [
'languageCode' => \Yii::$app->locale->languageCode
]
]
]
正如其他用户在github上确认的那样,这个问题似乎是错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.