资讯专栏INFORMATION COLUMN

Sphinx 单词+数字索引

jasperyang / 2189人阅读

摘要:总结两种方式都能起作用,中缀索引比较简单,但会大幅度增加索引文件的大小和索引的速度安装正则引擎比较烦,而且要重新编译安装但对索引文件的大小和索引速度的影响较小。

导读

Sphinx 是一个非常强大的全文搜索引擎,能处理各种复杂的索引请求.但有时候需要一些特殊的设置.

问题

比如文档中有一种词,该词包含了字母和数字,比如(onepiece123) 如果一般情况下直接搜索onepiece或者123的时候,你是得不到这个文档的.

原因

sphinx在处理单词时,把整个词看作一个整体,用关键词搜索的时候也是,比如,搜索词如果是onepiece,那么得到的文档只能是包含了onepiece这个词段(如onepiece 123)的才能被索引到,否则除非直接搜索onepiece123,你是得不到文档onepiece123的.

解决方式

这种时候有两种方式可以解决:

中缀索引

设置中缀索引长度,中缀索引可以让我们进行通配符搜索文档的操作,比如word, word*, *word

min_infix_len

中缀索引长度默认为0,即不做中缀索引,假如设置成一个合适的长度,那么就能根据单词的某一部分查找到对应的文档,比如把min_infix_len 设置为2, 那么文档中包含test的词汇就会被分成 te, es, st tes, est,test这几种(最小长度2),当我们用关键字es 去搜索的时候,就能命中这个包含test的文档,当然,这也导致了我们的索引文件大小大幅度增加,索引速度降低的问题

为了解决开始的时候我们提到的这种单词带数字的查找,我们可以设置一个比较合适的中缀索引长度,比如8,那么包含onepiece123这个词的文档会被分成onepiece, onepiece1, onepiece12, onepiece123, nepiece12,...等等(按顺序包含至少8个原有字符,不能跳过任意的字母),这样,当我们搜索oinepiece的时候, 因为原有的oinepiece123文档被分成了包含了onepiece等多个的文档,我们就能命中这个oinepiece123所在的文档了.

设置regexp_filter

该设置允许我们通过正则的方式映射最终的文档格式.那样的话我们就能统一一些常见的单词或者短语的格式了.
比如

"iphone 3gs" , "iphone 3 gs" (或者甚是 "iphone3 gs")

当我们在搜索这些关键词的时候,我们都希望能命中包含iphone3gs这个文档,我们可以像这样设置索引:
  

regexp_filter = [(iphone 3gs)| (iphone 3 gs) | (iphone3 gs)] => iphone3gs

  这样在创建索引的时候, 所有包含上面三种的iphone 3gs的格式都能映射成iphone3gs, 在搜索iphone3gs的时候, 就能命中所有包含上面三种词的文档了

  回归我们的初始问题,这种方式处理单词+数字的索引设置可以这么设置

regexp_filter = ([a-z|A-Z]+)(d+) =>1 2

  "1"和"2"之间有空格,"1"对应单词的正则匹配, "2"对应数字的正则匹配,中间加了一个空格,这就表示在创建索引的时候单词+数字的文档会被分开.
  不过要说明的是,如果想使用这个配置,需要安装一个名叫re2的正则引擎替代系统内置的正则引擎,安装好后重新编译安装sphinx的源码,在./configure的时候带上参数 
--with-re2,然后regexp_filter才会游泳

  这样也能解决单词+数字的搜索问题。

总结

  两种方式都能起作用,中缀索引比较简单,但会大幅度增加索引文件的大小和索引的速度.regexp_filter安装正则引擎比较烦,而且要重新编译安装sphinx, 但对索引文件的大小和索引速度的影响较小。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20948.html

相关文章

  • 使用sphinx search打造你自己的中文搜索引

    摘要:本文以为例来介绍如何打造自己的搜索引擎。其官方网站是可以说支持包括英文中文等所有语言的搜索。默认把中文按字拆分的,但这样就会产生搜索出不相干的内容来。因此,有人就给打了中文分词的补丁。 Google搜索引擎建立至今已经快20年了,之后全球各类大大小小类似的搜索引擎也陆续出现、消亡。国内目前以百度为大,搜狗、360、必应等也势在必争。搜索引擎技术也发展的相当成熟,同时也就出现了很多开源的...

    trigkit4 评论0 收藏0
  • Centos 编译安装sphinx-0.9.9全文检索

    摘要:简介是开源的搜索引擎,它支持英文的全文检索。但是往往我们要求的是中文索引,怎么做呢国人提供了一个可供企业使用的,基于的中文全文检索引擎。 Sphinx 简介 Sphinx是开源的搜索引擎,它支持英文的全文检索。所以如果单独搭建Sphinx,你就已经可以使用全文索引了。但是往往我们要求的是中文索引,怎么做呢?国人提供了一个可供企业使用的,基于Sphinx的中文全文检索引擎。也就是说Cor...

    LeoHsiun 评论0 收藏0
  • Centos 编译安装sphinx-0.9.9全文检索

    摘要:简介是开源的搜索引擎,它支持英文的全文检索。但是往往我们要求的是中文索引,怎么做呢国人提供了一个可供企业使用的,基于的中文全文检索引擎。 Sphinx 简介 Sphinx是开源的搜索引擎,它支持英文的全文检索。所以如果单独搭建Sphinx,你就已经可以使用全文索引了。但是往往我们要求的是中文索引,怎么做呢?国人提供了一个可供企业使用的,基于Sphinx的中文全文检索引擎。也就是说Cor...

    马龙驹 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<