在java中做全文搜索的话可以使用Lucene以及中文分词插件。在php中做全文搜素引擎可以使用Sphinx,中文分词也有很多选择,使用scws是不错的选择。scws的全称是Simple Chinese Words Segmentation。使 用scws有三种方式:一种是使用C语言编写的scws并在源码基础上进行拓展,速度最快但是不易拓展;一种是安装scws针对php编写的插件,然后就 可以直接在php中调用的scws的api函数,本文介绍的就是这种方法;最后一种是使用php重写的scws函数库,优点是不需要安装额外的插件,缺点 是程序的运行效率很低。(具体信息参见http://www.ftphp.com/scws)
在php中安装完scws插件后,执行如下语句:
$str = "在数据库中储存层次数据";
$temp = array();
$cws = scws_new();
$cws->set_multi(1);
$cws->set_charset('utf8');
$cws->send_text($str);
while ($tmp = $cws->get_result())
$temp[] = $tmp;
$arrWhere = array();
$t = array();
foreach($temp as $key=>$value){
foreach($value as $item){
$t[] = $item['word'];
}
pirnt_r($t)
程序运行后输出:
Array (可以看到分词结果中有重叠的地方,通过调节$cws->set_multi(1);中参数的值可以调整分词结果的颗粒度。例如设置$cws->set_multi(2);后输出结果为:
Array (使用这个中文分词插件可以做一些应用,比如交友网站上允许用户输入模糊搜索信息,用户可以输入“浙江杭州22岁有图”来搜索用户,经过分词输出数组:
Array (再在经过一些语义分析后(进行这种限定较多的语义分析并不复杂),就可以得到对应的数据库查询条件:
select * from members where str_provicne="浙江" and str_city="杭州" and int_age=22 and has_pic=1