sphinx应用
sphinx调用原理

只需要提交要查询,sphinx将返回唯一的id号
API调用
1.创建连接
$sphinx = new SphinxClient();
$sphinx->SetServer ( 'loclahost', 9312 );//建立连接
$sphinx->SetConnectTimeout(3);//连接超时时间,单位ms,0不限制
$sphinx->SetMaxQueryTime(10);//最大查询时间 $sphinx->SetArrayResult ( true );//搜索结果以数组格式返回,否则为hash
2.匹配查询
(1)查询分页
$sphinx->SetLimits($offset, $limit, $max_matches);
(2)设置查询模式
$sphinx->SetMatchMode ( $mode );
$mode--SPH_MATCH_ALL 匹配所有查询词(默认模式)
SPH_MATCH_ANY 匹配查询词中的任意一个
SPH_MATCH_PHRASE 将整个查询看作一个词组,要求按顺序完整匹配
SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式
SPH_MATCH_EXTENDED 将查询看作一个CoreSeek/Sphinx内部查询语言的表达式 . 从版本Coreseek 3/Sphinx 0.9.9开始, 这个选项被选项SPH_MATCH_EXTENDED2代替,它提供了更多功能和更佳的性能。保留这个选项是为了与遗留的旧代码兼容
SPH_MATCH_EXTENDED2 使用第二版的“扩展匹配模式”对查询进行匹配。该扩展匹配模式允许使用一些像mysql的条件语句
SPH_MATCH_FULLSCAN, 强制使用下文所述的“完整扫描”模式来对查询进行匹配。注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生
(3)设置排序模式
$sphinx->SetSortMode ( $mode, $sortby="");
$mode--SPH_SORT_RELEVANCE 模式, 按相关度降序排列(最好的匹配排在最前面)
SPH_SORT_ATTR_DESC 模式, 按属性降序排列 (属性值越大的越是排在前面)
SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面)
SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序
SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。
SPH_SORT_EXPR 模式,按某个算术表达式排序
注:
在SPH_SORT_EXTENDED 模式中,涉及的属性(包括内部属性)不能超过5个
内部属性名字以@开头
已知的内部属性:
@id 匹配id
@weight 匹配权值
@rank 匹配权值
@relevance 匹配权值
@rank和@relevance是@weight的别名
(4)结果集过滤
A.ID过滤
$sphinx->SetIdRange($min, $max);
限制ID在某个范围内参数必须为整数,默认为(0,0)
B.字段(属性)过滤
$sphinx->SetFilter($attribute, $value,$exclude=false);
增加整数值过滤器
$sphinx->SetFilterRange($attribute, $min,$max,$exclude=false);
增加整数范围过滤器
$sphinx->SetFilterFloatRange($attribute, $min,$max,$exclude=false);
增加浮点数过滤器
说明:
$exclude为布尔值,true-接受匹配的文档,false拒绝
(5) 执行查询
$sphinx->Query ( $query, $index="*" );
$query查询字符串
$index 包含一个或多个索引名的字符串,需要和sphinx端配置文件的索引名一致
若发生错误,返回false并设置GetLastError()信息
若返回成功,返回搜索的结果集,默认是hash。包含的键值:
matches------hash表,存储文档ID以及其对应的另一个包含文档权重和属性值的hash表
total----------此查询在服务器检索所得的匹配文档数
total_found--索引中匹配文档的总数
words---------一个hash,将查询关键字映射到一个关于关键字的统计数据的小hash表上
error----------search的报告的错误信息。无错误,空串
warning-------search的报告的警告信息。无警告,空串
time-----------查询所需时间
$res = $cl->Query("pen",'*');
if ( $res===false )
{
print "Query failed: " . $cl->GetLastError() . ".<br/>";
} else
{
if ( $cl->GetLastWarning() )
print "WARNING: " . $cl->GetLastWarning() . "<br/>";
print "Query retrieved $res[total] of $res[total_found] matches in $res[time] sec.<br/>";
print "Query stats:<br>";
if ( is_array($res["words"]) )
foreach ( $res["words"] as $word => $info )
print " '$word' found $info[hits] times in $info[docs] documents<br/>";
print "<br/>";
if ( is_array($res["matches"]) )
{
$n = 1;
$matches = $res['matches'];
$ids = array_keys($matches);
var_dump($ids);
}
}
注:total_found 是在索引中找到的匹配总数,而 found 是返回的结果数
3.输出结果
(1)根据数组$ids从数据库获取信息
(2)对信息进行过滤
eg:去除标签
strip_tags($string,$allow)
(3)信息的处理
eg:产生文档和关键词高亮
$sphinx->BuildExcerpts($doc,$index,$words,$opts=array());
说明:
$doc ---包含字符串的数组
$index---包含索引名的字符串
$words---包含需要高亮的关键词字符串
$opts-----其他可选
before_match-----在匹配关键词前插入字符串,默认<br>
after_match-------在匹配关键词后插入字符串,默认</br>
chunk_separator--在摘要块之间插入的字符串 ,默认…
limit----------------摘要最多包含的符号数,默认256
around-------------每个关键词块左右选取的词的数目,默认5
exact_phrase------是否仅抽取最佳的一个段落
4.异常处理
(1)GetLastError()返回最近的错误信息
if($sphinx->GetLastError()){
var_dump($sphinx->GetLastError());
}
(2)GetLastWarning() 返回最近的警告信息
if($sphinx->GetLastWarning()){
var_dump($sphinx->GetLastWarning());
}
说明:
(1)sphinx并不会返回像mysql那样的数据数组,因为sphinx本来就没有记录完整的数据,只记录被分词后的数据。
所以要获取到真实数据还要根据matches中的ID去搜索mysql的表,但总体来说这样一来一回的速度还是远远比mysql的LIKE快得多,前提是几十万数据量以上,否则用sphinx只会更慢。
(2)修改配置完成后要重新建立索引才能生效
sphinx应用的更多相关文章
- 利用sphinx为python项目生成API文档
sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...
- 安装PHP sphinx扩展 sphinx-1.1.0/sphinx.c:105:2: error: too few arguments 错误
表现: /home/sphinx-1.1.0/sphinx.c: In function 'php_sphinx_client_read_property':/home/sphinx-1.1.0/sp ...
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...
- coreseek+sphinx+mysql+thinkphp整合
1.安装coreseek 1.1首先升级或安装系统依赖库 yum install make gcc g++ automake libtool mysql-client libmysqlclient15 ...
- 全文检索解决方案(lucene工具类以及sphinx相关资料)
介绍两种全文检索的技术. 1. lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...
- 如何将Sphinx生成的html文档集成进入Django
参考 http://stackoverflow.com/questions/10594618/django-and-sphinx-how-to-view-the-html-sphinx-generat ...
- Linux下搭建coreseek(sphinx+mmseg3)全文检索
测试平台:Center OS 1.设置环境,升级/安装系统基础依赖包:m4.autoconf.automake.libtool #设置路径和中文环境: $ export PATH=/usr/local ...
- debian下使用Sphinx异常“Could not import extension sphinx.builders.linkcheck (exception: cannot import name SSLError)”的解决
最近使用到Sphinx编译文档,出现如下异常: Extension error:Could not import extension sphinx.builders.linkcheck (except ...
- [搜索引擎]Sphinx的介绍和原理探索
What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...
- Sphinx安装配置应用
Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...
随机推荐
- git commit之后未submit,rebase之后找不到自己代码的处理方法
今天使用sourceTree提交代码的时候,commit之后未submit,直接rebase主分支代码,完了发现自己本地做的修改都没了,且远程没有本地分支.google之后发现有一个简单方法可以恢复到 ...
- iOS时间个性化设置设置
现在在很多项目中,不会直接显示时间,很多时候都是显示“刚刚”,”XX分钟前”,等等字样,那么他们是怎么实现的呢 ? .新建一个NSDate的类目:NSDate+XMGExtension NSDate+ ...
- #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案
郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...
- .NET Framework各版本比较
(1)本文比较了.NET Framework多个版本之间的区别,方便各位选择和切换.NET Framework. 版本号 发布日期 Visual Studio的版本 Windows上的默认情况 CLR ...
- Symantec Backup Exec 2010 Agent For Linux安装
以前写过一篇文章介绍过Symantec Backup Exec 2012 Agent For Linux安装安装,今天介绍一下Symantec Backup Exec 2010 Agent For L ...
- js控制复选框checkbox 只能单选
我们在页面经常会用到单选框,来提供单值选在字段,但是有一个问题就是:一旦选择了就不能去除(即--只要选择了就不能再以空值提交了). 所以为了解决这个问题,用复选框限制单选是一个不错的选择 <sc ...
- sql server 里面的 dynamic Data Masking
有时候啊,当我们存放在数据库里面的数据,需要明文存放,但是对于前台查询出来的,又不太希望明文放出去的时候(比方说客户的手机啊,邮箱啊)之类有点敏感的信息,之前通常是保存个明文,然后在前台展现的时候再特 ...
- SQL Server 2008 R2——统计各部门某年入职人数
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- 通过重构VO实现校验功能
现有个需求,需要添加供应商的页面校验功能,当填写一二级时,供应商是必填项,并且所填的供应商必须是二级分类下的,否则下一步和保存过不去: 解决方案: 1.在页面AM的XXXImpl.java中, 加入引 ...
- 编程中Foo, Bar 到底什么意思?
1 前言 在很多国外计算机书本和一些第三份开源软件的Demo中经常用到两个英文单词Foo,Bar.这到底是什么意思呢?从步入屌丝界的IT生活见到这两个单词到现在我还是不知道这两个单词的真正含义,今天有 ...