elasticsearch 使用mget()从ealstic搜索中按ID获取多个文档作为Yii2中的ActiveRecord

bq3bfh9z  于 2022-11-28  发布在  ElasticSearch
关注(0)|答案(1)|浏览(140)

我使用Yii 2类yii\elasticsearch\ActiveRecord来接收来自ElasticSearch的数据。通常该类中从ElasticSearch获取数据的方法会以ActiveRecord(AR)对象的形式返回数据。因此很容易从AR创建一个activeDataProvider来将数据填充到列表视图中,等等。
但是:yii\elasticsearch\ActiveRecord::mget()并不返回AR对象,而是返回一个文档数组。
我的疑问:
1.)有没有办法使用mget - feature / elastic multi get feature并将结果作为AR对象来获取?

2.)是否有办法将该文档数组引入AR对象,以使ActiveDataProvider(包括列表视图)正常工作?

xxb16uws

xxb16uws1#

我找到了以下解决方案:
1.运行Yii 2 mget,其中包含我想获取的ID列表,它将返回一个文档数组。
1.使用ArrayDataProvider类和上一步的mget-output创建ActiveDataProvider
示例代码:

use app\models\MyModel;
use yii\data\ArrayDataProvider;

$ids = ['123','456','789'];
$myModel = new MyModel(); # Data Model based on yii\mongodb\ActiveRecord;
$result = $myModel->mget($ids); # get documents from elastic where document id is in $ids
$dataProvider = new ArrayDataProvider([
            'allModels' => $result
        ]); # creating ActiveDataProvider, which can be used in Listviews.

相关问题