这是一个例子,站长自测可用,其中sphinx的安装,scws的安装,php的各个扩展安装等相关文章请在本站进行搜索关键字:sphinx和scws
<?php /* sphinx + scws 中文分词全文索引代码实现 / $search = $_GET['search']; if(empty($search)){exit;} //========================================scws //实例化分词插件核心类 $so = scws_new(); //设置分词时所用编码 $so->set_charset('utf8'); //设置分词所用词典(此处使用utf8的词典) $so->set_dict('/usr/local/scws12/etc/dict.utf8.xdb'); //设置分词所用规则 $so->set_rule('/usr/local/scws12/etc/rules.utf8.ini'); //分词前去掉标点符号 $so->set_ignore(true); //是否复式分割,如“中国人”返回“中国+人+中国人”三个词。 //取值可组合 (1)短词 (2)二元(将相邻的2个单字组合成一个词) (4)重要单字 (8)全部单字 $so->set_multi(1); //$so->set_multi(2); //如果为 true 则结果中多个单字会自动按二分法聚分,如果为 false 则不处理,缺省为 false $so->set_duality(true); //要进行分词的语句 get_result $so->send_text($search); //获取分词结果,如果提取高频词用get_tops方法(不需要循环调用) //**注意** get_result每次切词后本函数应该循环调用,直到返回 false 为止,因为程序每次返回的词数是不确定的。 while ($tmp = $so->get_result()) { foreach($tmp as $v){$words[] = '('.$v['word'].')';} } $so->close(); $keyword = implode("|",$words); //=============================================sphinx $sphinx = new SphinxClient; //sphinx的主机名和端口 $sphinx->setServer('127.0.0.1',9312); //设置返回结果集为php数组格式 $sphinx->SetArrayResult ( true ); //匹配结果的偏移量,参数的意义依次为:起始位置,返回结果条数,最大匹配条数 $sphinx->SetLimits(0, 20, 1000); //可用来实现分页 //匹配所有查询词(默认模式); $sphinx->SetMatchMode(SPH_MATCH_PHRASE); // 使用第二版的“扩展匹配模式”对查询进行匹配. $sphinx->SetMatchMode(SPH_MATCH_EXTENDED2); //使用多字段模式 $sphinx->SetMatchMode(SPH_MATCH_EXTENDED); //最大搜索时间 $sphinx->SetMaxQueryTime(10); //执行简单的搜索,这个搜索将会查询所有字段的信息(不包括设置的属性字段) $result = $sphinx->query($keyword,'articleindex'); //多关键词 '(配置)|(讲解)' //索引源是配置文件中的 articleindex ,如果有多个索引源可使用,号隔开:'email,diary' 或者使用''号代表全部索引源 foreach ($result['matches'] as $key => $val){ $id[] = $val['attrs']['aid']; } echo implode(',',$id);