rooslunn/yii2-solr

Solarium 构建在 Solarium 之上的 Yii2 框架 Solr 插件

安装: 25

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 22

类型:yii2-extension

dev-master 2014-12-18 13:41 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:08:07 UTC


README

基于 Solarium 的 Yii2 Solr 扩展。

基本上,这是一个 Solarium 的 Yii2 插件,使用起来非常简单,它所做的只是将 Solarium 的一部分抽象到 Yii2 中。

在这个存储库中,您只需要关注两个文件

  • 客户端 - Solr 客户端,表示连接
  • SolrDataProvider - 您可以与所有小部件等一起使用的数据提供程序

使用此扩展对 Solr 进行正常查询非常简单,我实际上会向您指向 Solarium 文档

Yii2 实际上只有一部分是在提供 Solarium 客户端类作为应用程序组件,以下是一个示例

$query = Yii::$app->solr->createSelect();
$query->setQuery('edismax&qf=title^20.0 OR description^0.3');
$result = Yii::$app->solr->select($query);
var_dump($result->getNumFound());

这就是查询 Solarium 所需的内容。如您所注意到的,您需要替换的是 Solarium 文档中使用的 $client,而您应该使用 Yii::$app->solr(或您的配置中名为 Solr 应用程序组件的任何内容)。

使用数据提供程序对于小部件来说同样简单,以下是一个示例

$query = Yii::$app->solr->createSelect();
$query->setQuery('(alt_subject_mpath:' . $model->path . ' OR alt_subject_mpath:' . $model->path . '.*) AND live:1');

new SolrDataProvider([
    'query' => $query,
    'modelClass' => 'common\models\SolrResult',
    'sort' => [
        'attributes' => [
            'title',
            'sales',
            'score'
        ]
    ]
]);

如您所注意到的,Solarium 查询对象可以直接放入数据提供程序的 query 属性。就像在 Yii1 中一样,您需要提供一个 modelClass,因为此扩展并没有直接连接到活动记录。

不实现 QueryInterface 并将查询钩子连接到活动记录的原因是,在许多情况下,Solr 索引一次代表多个活动记录,因此我想使其自由形式,并使用户能够产生一个特定的 Solr 模型,该模型可以返回他们想要的任何活动记录,而数据提供程序则将多个类馈送到小部件中。

现在您已经理解了基础知识,您将看到还有两个其他文件

  • Solr - 我在我的应用程序中使用的一个助手,我只是添加了它,以防它对其他人有用
  • SolrDocumentInterface - 一个接口,它定义了在 Solr 模型中使用的一个函数

Solr 类只是一个辅助类,如果您不需要它,您不需要它,所以我将转到 SolrDocumentInterface。接口类只定义了一个函数 populateFromSolr,它接受一个参数:Solarium 文档对象(来自循环)。它返回一个单独的 Yii2 模型。每当数据提供程序的 prepareModels() 函数迭代时,就会调用 populateFromSolr 函数,并且只接受单个文档。