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. Android横屏下Fragment界面重叠问题

    前言: 项目是基于平板开发的,设计的界面是要求横屏展示界面.所以我将所有的Activity都强制设置为横屏 android:screenOrientation="landscape" ...

  2. Request 和 Response 原理

    * Request 和 Response 原理:     * request对象和response对象由服务器创建,我们只需要在service方法中使用这两个对象即可        * 继承体系结构: ...

  3. The operation couldn’t be completed. (LaunchServicesError error 0.)

    问题描述: 当运行Xcode时,编译代码成功,但是登陆模拟器失败,显示错误:The Operation couldn't be completed.(LaunchServicesError error ...

  4. C#和ASP.NET之事件

    事件是一种用于类和类之间传递消息或触发新的行为的编程方式.通过提供事件的句柄,能够把控件和可执行的代码联系在一起, 如用户单击Button控件触发Click事件后就执行相应的事件处理代码. 事件的声明 ...

  5. 初探PHP多进程

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  6. 深入解析SQL Server并行执行原理及实践(下)

    谈完并行执行的原理,咱们再来谈谈优化,到底并行执行能给我们带来哪些好处,我们又应该注意什么呢,下面展开. Amdahl’s  Law 再谈并行优化前我想有必要谈谈阿姆达尔定律,可惜老爷子去年已经驾鹤先 ...

  7. phpRedis安装、配置及简单使用

    安装phpRedis前,请先安装Redis,再安装phpRedis插件. 1.下载安装 在linux服务器上,命令行执行以下命令(cd ./usr local/src 一般源码放在这里(推荐源码安装) ...

  8. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

  9. 【小白的CFD之旅】05 补充基础

    黄师姐是一个很干脆果敢的人,从她的日常装扮就能显露出来.卡帕运动装,白色运动鞋,马尾辫,这是小白对黄师姐的第一印象.“明天早上九点钟来实验室,我给你安排这阵子的任务.”黄师姐对小白说.说话语气和老蓝一 ...

  10. 兼容可控硅调光的一款LED驱动电路记录

    1.该款电路为兼容可控硅调光的LED驱动电路,采用OB3332为开关控制IC,拓扑方案为Buck: 2.FB1:磁珠的单位是欧姆,而不是亨利,这一点要特别注意.因为磁珠的单位是按照它在某一频率 产生的 ...