我将我的 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
独立于序列。如果两个部分中的一个被移除,另一个过滤器可以完美地工作,只是不能一起使用。任何想法?