条件过滤在列表中是常用的功能,使用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 测试', 索引名称),注意在使用上一篇的配置文件的时候需要做一些简单的修改,修改如下(红色标记,起别名主要用于区别):

wKiom1N53WqzTzyvAAYge_-I1PI924.jpg完成之后重新索引即可


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代替,它提供了更多功能和更佳的性能。