在Yii2.0 中怎么使用 sphinx 搜索

在Yii2.0 中怎么使用 sphinx 搜索,第1张

如何调用Sphinx

按上面配置,第5节点对数据库进行了索引,通过Sphinx自带的search(在bin/release目录)就可以在命令行进行搜索:

(搜索CGArt)

windows上:

search -c d:/sphinx/sphinx.conf CGArt

Linux上:

cd /usr/local/sphinx

./bin/search -c sphinx.conf CGArt

运行后,系统提示一堆信息:

....

....

words:

1. 'cgart': 36 documents, 189 hits

这个表示库中有36条记录符合要求,出现CGArt的有189处。应用程序如果想调用Sphinx,可以从两个方面:

一是通过Sphinx官方提供的API接口(接口有Python,Java,Php三种版本)

二是通过安装SphinxSE(具体见1.2部分),然后创建一个中介sphinxSE类型的表,再通过执行特定的SQL语句实现。

通过官方API调用Sphinx(以PHP为例)

在sphinx安装目录有一个API目录,里面有三个PHP文件:test.php,test2.php和sphinxapi.php。 sphinxapi.php是sphinx调用接口封装文件,test.php是一个在命令行下执行的查询例子文件,test2.php是一个生成摘要的 例子文件。

在命令下行运行test.php(Linux上没有API目录,需要从源程序包中复制api目录至/usr/local/sphinx)

Windows上:

D:\sphinx\bin\release>c:\php5.2\php.exe -c c:\php5.2\php.ini ..\..\api\test.php -i cgfinal CGartLinux上(php在/usr/local/php目录,sphinx.conf在/usr/local/sphinx目录):

cd /usr/local/sphinx

/usr/local/php/bin/php api/test.php -i cgfinal CGArtSphinx的API查询接口主要有这些内容(其实对照 一下sphinxapi.php就清楚了):

//创建Sphinx的客户端接口对象

$cl = new SphinxClient ()

//设置连接Sphinx主机名与端口

$cl->SetServer('localhost',3312)

//可选,为每一个全文检索字段设置权重,主要根据你在sql_query中定义的字段的顺序,Sphinx系统以后会调整,可以按字段名称来设定权重

$cl->SetWeights ( array ( 100, 1 ) )

//设定搜索模式,SPH_MATCH_ALL,SPH_MATCH_ANY,SPH_MATCH_BOOLEAN,SPH_MATCH_EXTENDED,SPH_MATCH_PHRASE

$cl->SetMatchMode(SPH_MATCH_ALL)

//设定过滤条件$attribute是属性名,相当于字段名(用SPH_MATCH_EXTENDED时),$value是值,$exclude是布尔型,

当为true时,相当于$attribute!=$value,默认值是false

$cl->SetFilter($attribute, $values, $exclude)

//设定group by

//根据分组方法,匹配的记录集被分流到不同的组,每个组都记录着组的匹配记录数以及根据当前排序方法本组中的最佳匹配记录。

//最后的结果集包含各组的一个最佳匹配记录,和匹配数量以及分组函数值

//结果集分组可以采用任意一个排序语句,包括文档的属性以及sphinx的下面几个内部属性

//@id--匹配文档ID

//@weight, @rank, @relevance--匹配权重

//@group--group by 函数值

//@count--组内记录数量

//$groupsort的默认排序方法是@group desc,就是按分组函数值大小倒序排列

$cl->SetGroupBy($attribute, $func, $groupsort)

//设定order by的内容,第一个参数是排序方法名,值有

// SPH_SORT_RELEVANCE,SPH_SORT_ATTR_DESC,SPH_SORT_ATTR_ASC,SPH_SORT_TIME_SEGMENTS,SPH_SORT_EXTENDED

//$sortby的值如"HITS desc"

$cl->SetSortMode(SPH_SORT_EXTENDED, $sortby)

//set count-distinct attribute for group-by queries,$distinct为字符串

$cl->SetGroupDistinct ( $distinct )

//相当于mysql的limit $offset,$limit

$cl->SetLimits($start,$limit)

//$q是查询的关键字,$index是索引名称,当等于*时表查询所有索引

cannot find MySQL include files.//这就是错误信息的提示啊,表示没有找到mysql的文件~~~,你要学会看错误信息~~~记住想要学好linux,必须要学会看报错信息

checking for mysql_config... /usr/local/mysql/bin/mysql_config(检查mysql_config文件,在/usr/local/mysql/bin/mysql_config)

checking for mysql_real_connect... (检查mysql_real_connect文件)

nochecking for mysql_real_connect...(没有检查到这个文件)

nochecking MySQL include files...(没有检查到mysql包含这个文件)

configure: error: missing include files.(安装:错误:没有包含这个文件)******************************************************************************ERROR: cannot find MySQL include files.(没有找到这个文件)Check that you do have MySQL include files installed.(检查mysql的安装文件)

The package name is typically 'mysql-devel'.(这个包的名称是mysql-devel)If include files are installed on your system, but you are still getting this message, you should do one of the following:(如果你的系统安装了这个文件,并且你知道,你应该按以下方法做:)1) either specify includes location explicitly, using --with-mysql-includes(明确指定包含文件的位置,使用--with-mysql-includes这个参数)

2) or specify MySQL installation root location explicitly, using --with-mysql(明确指定安装mysql的位置,使用绝对位置。使用--with-mysql参数)

3) or make sure that the path to 'mysql_config' program is listed in your PATH environment variable.(请确定mysql_config程序在你的PATH环境变量的路径)To disable MySQL support, use --without-mysql option.******************************************************************************

至于到底是什么问题,你自己看吧~~~只能帮你到这里了。。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7415304.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存