同事整理了一些有关sphinx中文索引的知识点,搬过来偷偷藏,希望看到不要打我。。

1:创建Sphinx对象
$Sphinx = new SphinxApi($SERVER_IP,$SERVER_PORT);

2:Sphinx的常用匹配模式(参考链接:https://blog.csdn.net/redleaf1995/article/details/36902595)

$SphinxApi->SetMatchMode(匹配模式);

(1):SPH_MATCH_ALL:匹配所有分词(Sphinx的默认模式)
如:手机配件(分词:手机/配件)
可以匹配:"手机坏了,需要找配件"
不能匹配:"我有一部手机"

(2):SPH_MATCH_ANY:匹配查询词中的任意一个分词
如:手机配件(分词:手机/配件)
可以匹配:"我有一部手机"
可以匹配:"配件找不到了"
可以匹配:"手机坏了,需要找配件机"

(2):SPH_MATCH_PHRASE:将整个查询看作一个词组,要求按顺序完整匹配
如:手机配件(分词:手机/配件)
与Mysql的 like %手机配件% 相似

(3):SPH_MATCH_BOOLEAN:将查询看作一个布尔表达式, 可以简单的与或非运算
如:( cat !dog ) | ( cat !mouse)
检索的结果包含cat,同时包含dog和mouse的数据

(4):SPH_MATCH_EXTENDED2:扩展匹配模式(比较常用,扩展性最多的一种模式)
详见参考链接


2:Sphinx的分页操作(SetLimit),可类比mysql的limit条件

$Sphinx->SetLimits(偏移位置,每页的数量,偏移位置+每页的数量,限制最大扫描的条数);

例:$Sphinx->SetLimits($pageOffset,$pageSize,$pageOffset+$pageSize,1000000);

3:Sphinx的过滤器(SetFilter),可类比mysql的where条件

$Sphinx->setFilter(字段,array(字段值));

例:$Sphinx->setFilter("plate_id",array(13));

4:Sphinx的分组操作,可类比mysql的group by条件

$SphinxGroupBy->setGroupBy(分组字段名,分组计算模式,分组后排序规则);

例:$SphinxGroupBy->setGroupBy("one_id",SPH_GROUPBY_ATTR, "@count desc");

5:Sphinx的排序操作,可类比mysql的order by条件

字段排序模式
$Sphinx->SetSortMode(SPH_SORT_EXTENDED,"pr DESC,id DESC");

扩展运算模式
$Sphinx->SetSortMode(SPH_SORT_EXPR,"@weight/3000 + pr");

6:Sphinx的执行 和 返回值

$result = $Sphinx->Query(所要筛选的关键词或者规则,Sphinx索引);

例 $result = $Sphinx->Query("手机配件","sphinx_index"); #检索手机配件

$result = $Sphinx->Query("手机 !配件","sphinx_index"); #检索手机,并排除包含配件的结果

检索出的结果集:$result['matches']