kalyabin / yii2-solr
Solarium 框架的 Solr 插件,基于 Solarium 构建
Requires
This package is auto-updated.
Last update: 2024-08-29 03:47:25 UTC
README
基于 Solarium 的 Yii2 Solr 扩展。
从 http://github.com/sammaye/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 应用程序组件的任何内容)。
要设置应用程序,您只需将其添加到您的配置中。以下是一个示例
'solr' => [ 'class' => 'kalyabin\solr\Client', 'options' => [ 'endpoint' => [ 'solr1' => [ 'host' => '10.208.225.66', 'port' => '8983', 'path' => '/solr' ] ] ] ],
配置中的 options
部分与 Solarium 自己的构造函数和选项一一对应。
使用数据提供者进行小部件的操作同样简单,以下是一个示例
$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, // an example class which assigns variables to the model(s) // and returns the model(s) 'modelClass' => 'SolrResult', 'sort' => [ 'attributes' => [ 'title', 'sales', 'score' ] ] ]);
如您所注意到的,Solarium 查询对象可以直接进入数据提供者的 query
属性。就像在 Yii1 中一样,您需要提供 modelClass
,因为此扩展并非直接连接到活动记录。
不实现 QueryInterface
并将查询钩子连接到活动记录的原因是,在许多情况下,Solr 索引代表许多活动记录,因此我想使其自由形式,并使用户能够生成特定的 Solr 模型,该模型可以返回他们认为合适的任何活动记录,而数据提供者只是将多个类输入到小部件中。
现在您已经了解了基础知识,您将看到还有两个其他文件
- Solr - 我在应用程序中使用的辅助工具,我添加它是因为可能对其他人有用
- SolrDocumentInterface - 一个定义在 Solr 模型中使用的单个函数的接口
Solr
类仅是一个辅助工具,如果您不需要它,则可以跳过。接下来,我将进入 SolrDocumentInterface
。接口类仅定义了一个函数 populateFromSolr
,它接受一个参数:Solarium 文档对象(来自循环)。它返回一个单独的 Yii2 模型。每当数据提供者的 prepareModels()
函数迭代时,都会调用 populateFromSolr
函数,并且它仅接受单个文档。