条件过滤在列表中是常用的功能,使用mysql数据库和sphinx进行搜索需要安装sphinx引擎
mysql命令行中,
show engine sphinx states;
可以查看是否有 sphinxex引擎,如果没有则需要安装,否则无法使用这样的语句:
select * from documents where group_id = 2 and query='@title 测试;mode=extended';
安装sphinx引擎大家可以参考:
http://blog.zhuyin.org/807.html
http://help.fireinter.com/database/mysql/20120417/49.html
在PHP代码中:
过滤使用的方法是 SetFilter(字段, 值)
如果需要在指定的字段上查询,那么需要用到 SetMatchMode(匹配模式-- SPH_MATCH_EXTENDED)需要使用扩展模式 同时在query方法中,需要使用到 query('@title 测试', 索引名称),注意在使用上一篇的配置文件的时候需要做一些简单的修改,修改如下(红色标记,起别名主要用于区别):
完成之后重新索引即可
PHP 代码:
<?php require('sphinxapi.php'); $sc = new SphinxClient(); $key = "测试"; $sc->SetMatchMode(SPH_MATCH_EXTENDED2); //使用扩展模式 $sc->setFilter('group_id', array(2)); //进行数据过滤 //$sc->setFilter('group_id', array(1,2)); //进行数据过滤 $res = $sc -> Query("@title $key", 'zhl');
备注:
匹配模式:
sphinx提供了两种方法:SetMatchMode() 和 SetRankingMode()
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代替,它提供了更多功能和更佳的性能。