Sphinx使用手册(PHP版)
连邦软件(南通)有限公司
网站事业部
季飞
2011年10月17日
目录
一、简介 (2)
1.环境与支持 (2)
2.测试结果 (2)
3.调用原理 (2)
二、Sphinx应用场景 (3)
1.全文检索 (3)
2.排序 (3)
3.分类 (3)
三、Sphinx运用之搜索 (3)
1.问吧 (3)
2.资讯 (3)
3.下载 (3)
四、API调用 (4)
1.创建连接 (4)
2.配置查询 (4)
3.输出结果 (6)
4.异常处理 (7)
一、简介
1.环境与支持
Sphinx支持MySQL等数据库。搜索API支持PHP、Java等语言。高性能的搜
索(在2–4GB的文本数据上,平均每次检索响应时间小于0.1秒),提供了优
秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法。
2.测试结果
数据库1200万条记录,最大搜索条数设为1000万,耗时3.x秒,其
余两台超时。
2数据库1200万条记录,最大搜索条数设为10万,耗时0.8秒,两台同时访问为0.9秒,用mysql直接搜索为24秒。
3数据库1200万条记录最大条数设为1,000,耗时0.0x秒。
4百度搜索后返回百万条记录实际最多可访问740条,google为880条,我们可以设为500条,查询速率在0.01秒级别。
3.调用原理
我们只需要提交要查询,Sphinx将返回唯一的id号。
二、Sphinx应用场景
1.全文检索
根据查询内容进行分词,检索返回结果,大数量时搜索效率提高近百倍。
2.排序
对搜索结果可以进行排序,排序可以按数据库中的字段,也可以是Sphinx内置的
属性。
3.分类
可以限定字段的数值或者范围,例:限定分类号为多少,此时就实现了分类。
当在问题索引中限定用户id时,将得到某个用户发布的所有问题。
三、Sphinx运用之搜索
全文检索限制用户输入最大为20个汉字,返回指定的条数(1000或500条)。
1.问吧
用户自己选择检索栏目问题(默认)或者答案,按排序。
2.资讯
检索标题和内容,按时间排序,显示标题和内容片段。
3.下载
仅检索标题,按下载量排序,显示下载的标题和摘要片段。
四、API调用
1.创建连接
require("sphinxapi.php");//引入Sphinx的API文件
$sphinx=new SphinxClient();
$server='192.168.10.199';//sphinx服务器地址
$port=9312;//端口号(默认为9312)
$sphinx->SetServer($server,$port);//建立连接
$sphinx->SetConnectTimeout(3);
/*连接超时时间(非常必要,比如sphinx服务器挂了等异常情况)单位为s,秒*/
$sphinx->SetMaxQueryTime(2000);/*最大查询时间单位为ms,毫秒,默认为0表示不限制*/
$sphinx->SetArrayResult(true);/*控制搜索结果集的返回格式,默认为假即has格式真为数组格式*/
2.配置查询
查询分页
$sphinx->SetLimits($offset,$limit,$max_matches);
给服务器端结果集设置一个偏移量($offset)和从那个偏移量起向客户端返回的匹
配项数目限制($limit)。并且可以在服务器端设定当前查询的结果集大小
($max_matches)
2设置查询模式
$sphinx->SetMatchMode(SPH_MATCH_ALL);
SPH_MATCH_ALL匹配所有查询词(默认),所有查询词都出现时才会返回
SPH_MATCH_ANY,匹配查询词中的任意一个
SPH_MATCH_PHRASE,将整个查询看作一个词组,要求按顺序完整匹配
3设置排序模式
$sphinx->SetSortMode($mode,$sortby="");php实例手册
SPH_SORT_RELEVANCE模式,按相关度降序排列(最好的匹配排在最前面)//默认
SPH_SORT_ATTR_DESC模式,按属性降序排列(属性值越大的越是排在前面)
SPH_SORT_ATTR_ASC模式,按属性升序排列(属性值越小的越是排在前面)
SPH_SORT_EXTENDED模式,按一种类似SQL的方式将列组合起来,升序或降序排
列。在SPH_SORT_EXTENDED模式中,您可以指定一个类似SQL的排序表达式,但
涉及的属性(包括内部属性)不能超过5个,例如:
$sphinx->SetSortMode(SPH_SORT_EXTENDED,’@relevance DESC,price ASC,@id DESC’);
只要做了相关设置,不管是内部属性(引擎动态计算出来的那些属性)还是用户定
义的属性就都可以使用。内部属性的名字必须用特殊符号@开头,用户属性按原样
使用就行了。在上面的例子里,@relevance和@id是内部属性,而price是用户定
义属性。
已知的内部属性:
@id(匹配的ID)
@weight(匹配权值)
@rank(匹配权值)
@relevance(匹配权值)
@rank和@relevance只是@weight的额外别名。
④结果集过滤
ID过滤
$sphinx->SetIDRange($min,$max);
限制ID在某个范围内参数必须为整数,默认为(0,0)
字段(属性)过滤
(1)$sphinx->SetFilter($attribute,$values,$exclude=false);
增加整数值过滤器
此调用在已有的过滤器列表中添加新的过滤器。$attribute是属性名。$values 是整数数组。$exclude是布尔值,它控制是接受匹配的文档(默认模式,即$exclude 为假时)还是拒绝它们。
实例:$sphinx->SetFilter('f_uid',array(60));
(2)$sphinx->SetFilterRange($attribute,$min,$max,$exclude=false);
添加新的整数范围过滤器
此调用在已有的过滤器列表中添加新的过滤器。$attribute是属性名,$min、$max定义了
一个整数闭区间,$exclude布尔值,它控制是接受匹配的文档(默认模式,即$exclude为假时)还是拒绝它们。
实例:$sphinx->SetFilterRange('f_uid',60,1000);
(3)$sphinx->SetFilterFloatRange($attribute,$min,$max,$exclude=false);
增加新的浮点数范围过滤器
⑤执行查询
$sphinx->Query($query,$index="*");
$query为要查询的字符串
$index是包含一个或多个索引名的字符串(该名字必须于Sphinx服务器端配置文件中的名字一致,类似于查询数据库需要指定表的名字)。*表示查询所有的索引,多个索引可以用‘,’或者其他符号分隔。规则:索引名中允许的字符包括拉丁字母(a-z),数字(0-9),减号(-)和下划线(_),其他字符均视为分隔符。例如:$sphinx->Query(“电脑没有声音怎么办?”,“answer,question”);
一旦发生一般错误,则返回假并设置GetLastError()信息。若成功则返回搜索的结果集。返回结果集默认是Hash.
包含如下键和值
"matches":
是一个hash表,存储文档ID以及其对应的另一个包含文档权重和属性值的hash 表
"total":
此查询在服务器检索所得的匹配文档总数(即服务器端结果集的大小)。这是在当前设置下,用当前查询可以从服务器端获得的匹配文档数目的上限。
"total_found":
(服务器上到和处理了的)索引中匹配文档的总数。
"words":
一个hash,它将查询关键字(关键字已经过大小写转换,取词干和其他处理)映射到一个包含关于关键字的统计数据(“docs”——在多少文档中出现,“hits”
——共出现了多少次)的小hash表上。
"error":
searchd报告的错误信息(人类可读的字符串)。若无错误则为空字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论