本篇用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类的默认设置:
查看手册参数说明:
如果碰到项目具体的匹配和排序规则,也可以改变自定义规则,具体使用(这是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
:这个方法着重说明一下:
首先看手册:
查看shpinx官方 文档:
整体理解起来:当你的索引字段有多个时,你想要给不同的索引字段 分配不同的查询权重,就需要用到该方法!
over–如果不使用laravel的包,官方也提供了例子,具体如下: