kalyabin/yii2-solr

Solarium 框架的 Solr 插件,基于 Solarium 构建

维护者

详细信息

github.com/kalyabin/yii2-solr

源代码

安装: 7

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 22

类型:软件包

dev-master 2015-10-15 16:08 UTC

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 函数,并且它仅接受单个文档。