b0rner/yii2-solr

基于Solarium 6和PHP 8构建的Yii2框架Solr插件

维护者

详细信息

github.com/B0rner/yii2-solr

源代码

安装: 10

依赖: 0

建议: 0

安全性: 0

星标: 1

关注者: 0

分支: 22

类型:yii2-extension

v2.1.2 2023-02-16 13:51 UTC

This package is auto-updated.

Last update: 2024-09-17 20:48:17 UTC


README

基于Solarium 6构建的Yii2 Solr扩展,支持PHP 8。本扩展基于Sammaye的yii2-solr(https://github.com/Sammaye/yii2-solr),遗憾的是它不再继续开发。感谢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' => 'b0rner\solr\Client',
		'options' => [
			'endpoint' => [
				'solr1' => [
					'host' => '10.208.225.66',
					'port' => '8983',
					'path' => '/',
					'collection' => 'myColl
				]
			]
		]
	],

配置中的 options 部分与Solarium自己的构造函数和选项一一对应。

使用数据提供者的小部件同样简单,以下是一个示例

$query = Yii::$app->solr->createSelect();
// set query, use solr syntax
$query->setQuery('name:bob');

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() 函数的每次迭代中都会被调用,并且只接受一个文档。