Sphinx全文检索之PHP使用教程(3)

有如下可选的匹配模式:

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代替,它提供了更多功能和更佳的性能。保留这个选项是为了与遗留的旧代码兼容——这样即使Sphinx及其组件包括API升级的时候,旧的应用程序代码还能够继续工作。

SPH_MATCH_EXTENDED2, 使用第二版的“扩展匹配模式”对查询进行匹配.

SPH_MATCH_FULLSCAN, 强制使用下文所述的“完整扫描”模式来对查询进行匹配。注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生.

我们要关注的主要是SPH_MATCH_EXTENDED2扩展匹配模式,扩展匹配模式允许使用一些像mysql的条件语句

//设置扩展匹配模式

$sphinx->SetMatchMode ( "SPH_MATCH_EXTENDED2" );

//查询中使用条件语句,字段用@开头,搜索内容包含测试,toid等于1的邮件:

$result = $sphinx->query('@content (测试) & @toid =1', '*');

//用括号和&(与)、|、(或者)、-(非,即!=)设置更复杂的条件

$result = $sphinx->query('(@content (测试) & @subject =呃) | (@fromid -(100))', '*');

//更多语法请查看官方文档匹配模式的说明

扩展匹配模式中值得一提的是搜索的字段,如果该字段被设置属性,那么扩展匹配搜索的字段默认是不包含这些属性的,只能用SetFilter()或者SetFilterRange()之类

之前我们设置了fromid、toid、sendtime为属性,但又想在扩展匹配模式中又想用作条件该怎么办?

只要在sql_query语句中再选择多一次该字段就可以了

sql_query                = SELECT emailid,fromid,fromid,toid,toid,subject,content,sendtime,sendtime,attachement FROM email

//设置完成记得重新建立索引

更多条件技巧

只是一些技巧,但不建议使用的部署环境中,至于为什么,请看文章结尾

<、<=、>、>=

默认sphinx没有这些比较符。

假如我想邮件的发送时间大于某一日期怎么办?用SetFilterRange()方法模拟一下

//大于等于某一时间截$time

$sphinx->SetFilterRange('sendtime', $time, 10000000000) //时间截最大是10个9,再加1是不可超越了。。

//大于某一时间截$time

$sphinx->SetFilterRange('sendtime', $time+1, 10000000000)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4c98e9ce178d1d3c054d52bc0e5edc40.html