Sphinx高性能的搜索引擎(简单、强大、实用)-it论坛-计算机...
Sphinx高性能的搜索引擎(简单、强大、实用)-it论坛-计算机论坛一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。ferret也望尘莫及,更不要说lucene了。
二、和数据库集成性很好
Sphinx通过配置文件可以自行读取数据库信息做索引,不依赖任何外部的应用程序,并且可以作为一个daemon进程启动,支持分布式检索,并发响应性能很好。因此很多过去使用ferret的人因为并发检索的问题都改用Sphinx了。
三、可以做MySQL的全文检索 -it论坛-计算机论坛
MySQL的数据库引擎是可插拔的结构,Sphinx开发了一个SphinxSE数据库引擎,可以在编译MySQL的时候直接编译到MySQL里面去,这样的话,可以在数据库级别支持高性能的全文检索,那么你可以以如下SQL方式去全文检索。
相关代码参考://创建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是索引名称,当等于*时表查询所有索引
$res = $cl->Query ( $q, $index );
//进入命令行,运行d:/sphinx/bin/release/indexer --config d:/sphinx/sphinx.conf cgfinal
//如果您在sphinx.conf中配置了多个数据源,想一次性全部索引则d:/sphinx/bin/release/indexer --config d:/sphinx/sphinx.conf --all
//运行检索守护进程searchdSphinx开发者可以按照自己的想法将以上代码进行封装,移植到相关项目中进行实施.
注:sphinx目前唯一的不足是对中文分司支持还不强大,其它各方面都比ferret、lucene强
本文摘自:http://blog.csdn.net/lgm252008/article/details/5373354
页:
[1]