laiyuquan

博客

sphinx-laravel项目实战篇

本篇用laravel5.5框架,说明如何具体使用Sphinx服务;


下载安装包:sngrl/sphinxsearch

composer require sngrl/sphinxsearch:dev-master

 

config/app.php 注册服务:

'providers' => array(
      /*** Some others providers ***/
     sngrl\SphinxSearch\SphinxSearchServiceProvider::class,
),

 

添加配置文件:

php artisan vendor:publish --provider=sngrl\SphinxSearch\SphinxSearchServiceProvider --force

然后在配置文件sphinxsearch.php,添加配置:

return array (
	'host'    => '127.0.0.1', #sphinx服务器IP
	'port'    => 9312, #端口号
	'indexes' => array (
		'dxywisdom' => array ( 'table' => 'clg_themes', 'column' => 'id' ),
	        #索引的名称                          索引所在表的名称         主键id
    ) 
);

 

具体的使用

具体使用的PHP文件中,先引入:

use sngrl\SphinxSearch\SphinxSearch;

public static function search(){
$limit['pageSize'] = request('pagesize',10); //page数

$limit['pageNum']  = (intval(request('page',1))-1) * intval($limit['pageSize']);

//我已经加入圈子 主题数据
$myCommunityIds = [20,21]; //测试数据,用来属性过滤的数据

$sphinx = new SphinxSearch();

$results = $sphinx->search('搜索的关键字', 'dxywisdom') //参数1:搜索的关键字,参数2:索引的名称

                  ->limit($limit['pageSize'],$limit['pageNum'])  //limit 用来分页 直接默认是展示20  limit条数 

                  ->filter('community_id', $myCommunityIds)  //用来进行过滤的属性 前提是先要建立该字段索引

                  ->get()

                  ->toArray();
}

laravel的sngrl-SphinxSearch 使用的过程还是很简单的。注意一点:过滤和排序的字段,需要建立索引属性才能使用!

 

再来看一下 这个Sphinx类的默认设置:

《sphinx-laravel项目实战篇》

查看手册参数说明:

《sphinx-laravel项目实战篇》

《sphinx-laravel项目实战篇》

 

如果碰到项目具体的匹配和排序规则,也可以改变自定义规则,具体使用(这是git上提供的例子):

$result = $sphinx->search('my query', 'index_name')
	->setFieldWeights(
		array(
			'partno'  => 10, #索引字段1 名称
			'name'    => 8,  #索引字段2 名称
			'details' => 1   #索引字段3 名称
		)
	)
	->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED)
	->setSortMode(\Sphinx\SphinxClient::SPH_SORT_EXTENDED, "@weight DESC")
	->get(true);  //passing true causes get() to respect returned sort order

 

setFieldWeights:这个方法着重说明一下:

首先看手册:

《sphinx-laravel项目实战篇》

查看shpinx官方 文档:

《sphinx-laravel项目实战篇》

整体理解起来:当你的索引字段有多个时,你想要给不同的索引字段 分配不同的查询权重,就需要用到该方法!


over–如果不使用laravel的包,官方也提供了例子,具体如下:

《sphinx-laravel项目实战篇》

《sphinx-laravel项目实战篇》

 

 

点赞

发表评论