sphinx mysql like_在sphinx中实现类似mysql like %var%的方法

在做了多次对sphinx各种情况的检索下。发现我们可以充分利用sphinx实现很多功能。比如替换 mysql的like

。而不需要全文检索功能

在sphinx中,默认设置是对单词(英语)进行特定字符(如:/,空格等)做分割的全文检索功能。所以,如果我们要在文章中(textfield)检索某个特定的字词,只能针对

某个单词进行检索。比如 搜索test,出现的只能是 单个单词 test。如果要实现 搜索 tes

,则不会出现匹配test的项目。如果要实现这样的情况。我们可以针对

单个字(字母)进行索引。这个在中文检索中特别重要。因为中文不是根据特殊字符界定的。

在sphinx中文包 coreseek中已经对这个包进行了分割。但现在我们需要的是单个实现类似mysql like功能。

例如:

我是中华人民共和国公民

我需要检索“是中”,在coreseek中文包中是没有对这个进行分词索引。所以有时候会检索不到。那么我们这时候可以不使用中文全文检索。单独使用utf-8作为字符编码不使用coreseek的字典文件。同时对索引中缀长度设置为

1 。并设置utf-8的charset-table即可实现like 功能!

附:sphinx中文手册中中缀索引

8.2.14. min_prefix_len

索引的最小前缀长度。可选选项,默认为0(不索引前缀)。

前缀索引使实现“wordstart*”形式的通配符成为可能(通配符语法的细节请参考enable_star

选项)。当最小前缀长度被设置为正值,indexer除了关键字本身还会索引所有可能的前缀

(即词的开头部分)。太短的前缀(小于允许的最小值)不会被索引。

例如,在min_prefix_len=3设置下索引关键字“example”会导致产生5个索引项“exa”,

“exam”, “examp”, “exampl”和该词本身。对这个索引搜索“exam”会得到包含“example”的文

档,即使该文档中没有“exam”自身。然而,前缀索引会使索引体积急剧增大(因为待索引

关键字增多了很多),而且索引和搜索的时间皆会恶化。

在前缀索引中没有自动的办法可以提高精确匹配(整个词完全匹配)的评分,但有一些技巧

可以实现这个功能。首先,可以建立两个索引,一个带有前缀索引,另一个没有,同时在这

两个索引中搜索,然后用SetIndexWeights() 来设置二者的权重。其次,可以启用星号语法并

重写扩展模式的查询。

# in sphinx.conf

enable_star = 1

// in query

$cl->Query ( “( keyword | keyword* ) other keywords” );

示例:

min_prefix_len = 3

8.2.15. min_infix_len

索引的最小中缀长度。可选选项,默认为0(不索引中缀)。

中缀索引是实现“start*”, “*end”, and “*middle*”等形式的通配符成为可能(通配符语法的细

节请参考enable_star 选项)。当最小中缀长度设置为正值,indexer除了对关键字本身还会

对所有可能的中缀(即子字符串)做索引。太短的中缀(短于允许的最小长度)不会被索引。

例如,在min_infix_len=2设置下索引关键字“test”会导致产生6个索引项 “te”, “es”, “st”,

“tes”, “est”等中缀和词本身。对此索引搜索“es”会得到包含“test”的文档,即使它并不包含

“es”本身。然而,中缀索引会使索引体积急剧增大(因为待索引关键字增多了很多),而

且索引和搜索的时间皆会恶化。

在中缀索引中没有自动的办法可以提高精确匹配(整个词完全匹配)的评分,但可以使用与

prefix indexes 选项中相同的技巧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值