繁体   English   中英

如何在Yii2 elasticsearch 6中混合$ query-> andFilterWhere和$ query-> query

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM