sphinx 使用
1、使用规范
setServer($sphinxHost, $port);$s->setArrayResult(true);$s->setMatchMode(SPH_MATCH_ANY); //SPH_MATCH_ANY SPH_MATCH_EXTENDED2$s->SetRankingMode(SPH_RANK_MATCHANY);$s->setMaxQueryTime(30);$s->SetLimits(($page - 1) * $pageSize, $pageSize,$maxSize);$res = $s->query($row['multi_name'], $source);复制代码
2、主要方法和注意事项
①setMatchMode //匹配模式
SPH_MATCH_ALL 匹配所有查询词(默认模式).SPH_MATCH_ANY 匹配查询词中的任意一个.SPH_MATCH_PHRASE 将整个查询看作一个词组,要求按顺序完整匹配.SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式.SPH_MATCH_EXTENDED 将查询看作一个Sphinx内部查询语言的表达式.SPH_MATCH_FULLSCAN 使用完全扫描,忽略查询词汇.SPH_MATCH_EXTENDED2 类似 SPH_MATCH_EXTENDED ,并支持评分和权重.复制代码
②setRankingMode //排序模式
SPH_RANK_PROXIMITY 设置评分模式SPH_RANK_PROXIMITY_BM25 默认,基于评分和 BM25 两个因素SPH_RANK_MATCHANY 和SPH_MATCH_ANY 相对应复制代码
③setFilter(fieldName, array(value1,value2,...)); //设置过滤字段字
④SetFieldWeights //设置字段权重
$s->SetFieldWeights (array('industry'=>1,'area'=>2));//设置字段的权重,如果area命中,那么权重算2复制代码
⑤setSortMode //设置排序
SPH_SORT_RELEVANCE 模式, 按相关度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按属性降序排列 (属性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。SPH_SORT_EXPR 模式,按某个算术表达式排序。复制代码
⑥SetLimits //设置分页
$s->SetLimits(($page - 1) * $pageSize, $pageSize,$maxSize); //$maxSize 不能超过max_matches复制代码
3、按照字段命中计算权重 排序
$s->SetRankingMode ( SPH_RANK_PROXIMITY );//设置评分模式$s->SetMatchMode ( SPH_MATCH_EXTENDED );//设置模式$s->SetRankingMode ( SPH_RANK_PROXIMITY );//设置评分模式$s->SetFieldWeights (array('industry'=>1,'area'=>2,'expr'=>2));//设置字段的权重,如果area命中,那么权重算2$s->SetSortMode ('SPH_SORT_EXPR','@weight');//按照权重排序复制代码
4、配置项说明
source question{ type = mysql sql_host = 10.10.1.150 sql_user = dev_dba sql_pass =db_pass sql_db = db_name sql_port = 3306 # optional, default is 3306 sql_query_pre = SET NAMES utf8 sql_query = \ SELECT * FROM t_wenda_question order by add_time desc sql_field_string = title #设置字段属性}#impressionSuite 继承question公共配置source impressionSuite : question{ sql_query = \ SELECT id,title FROM t_impression_suite where state=4 order by id desc sql_attr_uint = id sql_query_info = SELECT * FROM t_impression_suite WHERE id=$id }index question{ source = question path = /usr/local/coreseek-4.1/var/data/question docinfo = extern charset_dictpath = /usr/local/mmseg_3.2.14/etc charset_type = zh_cn.utf-8 ngram_len = 0}#impressionSuite 继承question公共配置index impressionSuite : question{ source = impressionSuite path = /usr/local/coreseek-4.1/var/data/impressionSuite }复制代码