sphinx 中缀索引配置,实现类似like的搜索

该文章转至:http://www.86afei.com/2010/12/01/218


这一段时间来一直在跟sphinx打交道,其间或多或少遇到一些问题,其中让我费时最多的莫过于模糊搜索。

用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
}

正如手册上所说的

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

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

—— EOF ——


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值