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应用的更多相关文章

  1. 利用sphinx为python项目生成API文档

    sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...

  2. 安装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 ...

  3. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  4. coreseek+sphinx+mysql+thinkphp整合

    1.安装coreseek 1.1首先升级或安装系统依赖库 yum install make gcc g++ automake libtool mysql-client libmysqlclient15 ...

  5. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  6. 如何将Sphinx生成的html文档集成进入Django

    参考 http://stackoverflow.com/questions/10594618/django-and-sphinx-how-to-view-the-html-sphinx-generat ...

  7. Linux下搭建coreseek(sphinx+mmseg3)全文检索

    测试平台:Center OS 1.设置环境,升级/安装系统基础依赖包:m4.autoconf.automake.libtool #设置路径和中文环境: $ export PATH=/usr/local ...

  8. 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 ...

  9. [搜索引擎]Sphinx的介绍和原理探索

    What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...

  10. Sphinx安装配置应用

    Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文搜索引擎.意图为其他应用提供高速.地空间占用.高结果相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成 ...

随机推荐

  1. git commit之后未submit,rebase之后找不到自己代码的处理方法

    今天使用sourceTree提交代码的时候,commit之后未submit,直接rebase主分支代码,完了发现自己本地做的修改都没了,且远程没有本地分支.google之后发现有一个简单方法可以恢复到 ...

  2. iOS时间个性化设置设置

    现在在很多项目中,不会直接显示时间,很多时候都是显示“刚刚”,”XX分钟前”,等等字样,那么他们是怎么实现的呢 ? .新建一个NSDate的类目:NSDate+XMGExtension NSDate+ ...

  3. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

    郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

  4. .NET Framework各版本比较

    (1)本文比较了.NET Framework多个版本之间的区别,方便各位选择和切换.NET Framework. 版本号 发布日期 Visual Studio的版本 Windows上的默认情况 CLR ...

  5. Symantec Backup Exec 2010 Agent For Linux安装

    以前写过一篇文章介绍过Symantec Backup Exec 2012 Agent For Linux安装安装,今天介绍一下Symantec Backup Exec 2010 Agent For L ...

  6. js控制复选框checkbox 只能单选

    我们在页面经常会用到单选框,来提供单值选在字段,但是有一个问题就是:一旦选择了就不能去除(即--只要选择了就不能再以空值提交了). 所以为了解决这个问题,用复选框限制单选是一个不错的选择 <sc ...

  7. sql server 里面的 dynamic Data Masking

    有时候啊,当我们存放在数据库里面的数据,需要明文存放,但是对于前台查询出来的,又不太希望明文放出去的时候(比方说客户的手机啊,邮箱啊)之类有点敏感的信息,之前通常是保存个明文,然后在前台展现的时候再特 ...

  8. SQL Server 2008 R2——统计各部门某年入职人数

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  9. 通过重构VO实现校验功能

    现有个需求,需要添加供应商的页面校验功能,当填写一二级时,供应商是必填项,并且所填的供应商必须是二级分类下的,否则下一步和保存过不去: 解决方案: 1.在页面AM的XXXImpl.java中, 加入引 ...

  10. 编程中Foo, Bar 到底什么意思?

    1 前言 在很多国外计算机书本和一些第三份开源软件的Demo中经常用到两个英文单词Foo,Bar.这到底是什么意思呢?从步入屌丝界的IT生活见到这两个单词到现在我还是不知道这两个单词的真正含义,今天有 ...