yii2+;elasticsearch:如何使用';排序';与';查询';搜寻

yii2+;elasticsearch:如何使用';排序';与';查询';搜寻,yii2,Yii2,信息:使用“yiisoft/yii2 elasticsearch”:“2.1.x-dev” 我想使用yii2 elastic执行以下操作: (来自) 当我使用以下选项时: $query = [ 'bool' => [ // 'must' => [ // 'match_all' => [] // this throws a diff error //

信息:使用“yiisoft/yii2 elasticsearch”:“2.1.x-dev”

我想使用yii2 elastic执行以下操作: (来自)

当我使用以下选项时:

$query = [
            'bool' => [
//                    'must' => [
//                        'match_all' => [] // this throws a diff error
//                    ],
                'filter' => [
                    'geo_distance' => [
                        'distance' => $distance . "km",
                        'location' => [
                            'lat' => $lat,
                            'lon' => $lng
                        ]
                    ]
                ]
            ]
        ];

        $sort = [
            'geo_distance' => [
                'location' => [
                    'lat' => $lat,
                    'lon' => $lng
                ],
                'order' => 'asc',
                'unit' => 'km'
            ]
        ];

        $models = Model::find()
            ->query($query)
            ->orderBy($sort)
            ->all();
我得到一个错误:

异常“yii\elasticsearch\Exception”和消息“elasticsearch” 请求失败,代码为400。答复机构: {“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“[field\u sort] 未知字段[位置],分析器不存在 找到“}],“类型”:“非法参数\异常”,“原因”:“[字段\排序] 未知字段[位置],未找到分析器“}”,状态:400}

也许我可以将原始json查询传递给yii2 elasticsearch?还不确定Yi2 elasticsearch库是否能够处理“位置”(地理距离)字段

感谢您的帮助,
gvanto

您可以使用
orderBy
方法编写如下内容

MyModel::find()
  ->query(...)
  ->orderBy([
    'post_date' => SORT_ASC,
    'name' => SORT_DESC
  ])
  ->all()

谢谢Vladimir试过了,没用。。。最后我用guzzle做了一个纯粹的卷曲呼叫。。。
MyModel::find()
  ->query(...)
  ->orderBy([
    'post_date' => SORT_ASC,
    'name' => SORT_DESC
  ])
  ->all()