教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > 搜索引擎 >

sphinx的类似like模糊搜索

时间:2013-04-06 12:51来源:未知 作者:ken 点击:

sphinx模拟like模糊搜索,使用前缀,中缀索引等来扩大分词的范围会使索引迅速膨胀,如添加一个中缀字符长度至少就增加了不少于3倍的索引,同样会影响搜索效率。

用sphinx做中文搜索时,大多会使用到mmseg做为分词工具,如’白下区KTV’分解成’白下区’ , ‘KTV’两个词。

一般只要词库里有的词都能高效的从索引里搜索到,但如果搜索’白下KTV’会被分解成’白’ , ‘下’ , ‘KTV’三个词,而词库中并没有前两个,类似的情况很多,想要短时间完善和丰富词库很困难,虽然通过搜狗的细胞词库,我已经搜集到所属行业的词约17万个。

于是我查找了大量似类情况别人的解决方案,其中coreseek(sphinx)官网提供了两个解决方案。

一元分词:

http://www.coreseek.cn/products-install/ngram_len_cjk/

同义词:

http://www.coreseek.cn/products-install/coreseek_mmseg_complex/

一元分词的特点是把每个单一的词做为一个分词,并且不使用词库检索,所索引会很大,查询开销会变大,而且享受不了词库所带来的精准性。

同义词我没有去试,我觉得不失为一个好的解决方案,不过我想词库过大对性能也会有一定的影响,而且我并不是使用mmseg的默认词库。

还有一种方法是开启enable_star=1,该方法的核心是使用通配符,这样我们在php里也要做个分词,而且我并没有测试成功(此法我不知道哪里是首发网站,所以不贴于网址)

通过查询手册我采用以下方法,并且测试成功:

修改index配置,如下所示

enable_star=0 #不使用通配符,默认不启用,可以不写

min_infix_len=1 #使用中缀索引,并且最小索引为1,关于该项作用不知者可以查询手册

infix_fields=字段1,字段2 #因为中缀索引会使索引量急剧膨胀,所以最好选择你认为最主要的少量几个字段做中缀索引。

附上我的配置

index test {   
    source                  = mysql    
   path                    = /usr/local/coreseek/var/data/test1       
docinfo                 = extern      
 mlock                   = 0     
  morphology              = none    
   min_word_len            = 1     
  html_strip                              = 1    
   charset_dictpath = /usr/local/mmseg3/etc/     
  charset_type            = zh_cn.utf-8     
  enable_star = 0       min_infix_len = 1     
  infix_fields = name,address 
} 

正如手册上所说的

中缀索引会使索引体积急剧增大(因为待索引关键字增多了很多)

不过由于还是可以使用词库进行搜索,所以保证了大多数的速度和精确性,并提高了模糊搜索的智能性。

(责任编辑:ken)
TAG标签: Sphinx 索引 模糊搜索
顶一下
(1)
33.3%
踩一下
(2)
66.7%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容