萨姆耶/yii2-solr

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

安装次数: 56,780

依赖者: 0

建议者: 0

安全: 0

星标: 10

关注者: 9

分支: 22

开放性问题: 1

类型:yii2-extension

2.0.0 2020-12-30 11:19 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:37:28 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应用程序组件的任何名称)。

要设置应用程序,只需将其添加到您的配置中。以下是一个示例

	'solr' => [
		'class' => 'sammaye\solr\Client',
		'options' => [
			'endpoint' => [
				'solr1' => [
					'host' => '10.208.225.66',
					'port' => '8983',
					'path' => '/',
					'collection' => 'myColl
				]
			]
		]
	],

配置中的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模型。populateFromSolr函数在每个数据提供程序的prepareModels()函数的迭代中调用,并且始终只接受一个文档。