《艳遇SOLR》10--倒排索引的查询--模糊匹配

Posted 金沙数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《艳遇SOLR》10--倒排索引的查询--模糊匹配相关的知识,希望对你有一定的参考价值。

SOLR提供了4中模糊匹配得功能,但是所有的模糊匹配都是在消耗性能的前提下进行的。所以选择模糊匹配功能,要慎重。


在《solr in action》这本书中,以英文单词为例。比如以off 开头的英文单词,可以是office,officer,official,officiate等等。本文中以10个以”爱“开头的成语来举例说明solr的模糊搜索。


通配符搜索


第一

*  匹配零个或者多个


Query:  name:爱*



第二

? 匹配一个字符


Query:name:爱?分明


《艳遇SOLR》10--倒排索引的查询--模糊匹配


第三

通配符开头的查询


当执行name:爱?分明这个通配符查询的时候,①在倒排索引列表中匹配所有一爱开头的词,再结果中按照通配符的规则再去匹配。因此在①步骤中,匹配的词越少,查询速度越快。比如查询爱才如* 肯定比查询爱*要快,因为后者要匹配所有以爱开头的词。


以通配符开头的查询是一种非常耗费资源的操作。solr提供一种解决方案,创建索引的时候配置ReversedWildcardFilterFactory。配置了ReversedWildcardFilterFactory后,创建的索引为


爱不忍释     爱财如命      爱才如命   ……

#释忍不爱   #命如财爱   #命如才爱  #……


也就是说在创建索引的时候,创建一份反序索引。这样做虽然解决了查询时的资源消耗,但是消耗转义到了索引的创建上。很符合能量守恒定律--能量既不会凭空产生,也不会凭空消失,它只会从一种形式转化为另一种形式,或者从一个物体转移到其它物体,而能量的总量保持不变。


第四

短语查询不能使用通配符


这里所说的短语查询是上一篇文章中我们提到的短语查询。本例中4字程序是做一个一个词来存储的,并不是短语。如图

《艳遇SOLR》10--倒排索引的查询--模糊匹配



范围搜索


solr提供范围搜索。方括号 [] 表示闭区间;花括号{} 表示开区间


Query: created:[2012-02-01T00:00.0Z TO 2012-08-02T00:00.0Z]


Query: yearsOld:[18 TO 21]

        匹配18, 19, 20, 21


Query: price:[12.99 TO 14.99]

        匹配12.99, 13.000009, 14.99, 等.


Query: yearsOld:{18 TO 21}  

        匹配19 , 20 不匹配 18 , 21


Query: yearsOld:[18 TO 21}  

        匹配18,19,20,不匹配21

Query: order:{1 TO 5}   

        匹配order为2,3,4的文档


《艳遇SOLR》10--倒排索引的查询--模糊匹配

查询order:{1 TO 5}


模糊搜索/编辑距离搜索


在很多搜索中,搜索引擎除了要准确的匹配用户的搜索词之外,还要能处理一些拼写错误,甚至是纠正为正确的拼写。solr使用编辑距离搜索解决这种问题。

solr提供了以Damerau-Levenshtein距离算法为基础的edit-distance测量方式,可以纠正80%的人为拼写错误。


solr使用  ~  符号,进行编辑距离搜索


Query: name:爱如命~ 

     匹配 爱财如命,爱才如命,爱者如宝

这个查询结果,匹配原始查询词(爱如命)两个编辑距离以内的词。一个字符的插入,删除,替换或者字符变化算一个编辑距离。比如  爱如命  和  爱才如命  差了两个编辑距离。也可以自定义编辑距离搜索。


①Query: 爱如命~1 

        匹配一个编辑距离的词

Query: 爱如命~2 

        匹配两个编辑距离的词(默认配置)

Query: 爱如命~N 

        匹配N个编辑距离的词


当编辑距离的距离大于2时,查询将会变慢,精确度也会下降。如果一定要使用编辑距离搜索的话,不建议编辑距离大于2。


近似搜索


编辑距离不仅可以用于词的搜索,也可以用于短语的搜索。

在满大街都是CXO的年代,我们有这样一个搜索请求,需要搜索拥有CEO,CFO,CMO,CTO,等的头衔的人。


Query: "chief executive officer" OR "chief financial officer" OR "chief marketing officer" OR "chief technology officer" OR


这种搜索是建立在我们知道全部头衔的基础上的。比如陈伟霆与赵丽颖“入职”爱奇艺成为“首席会员推荐官”这个头衔。


可以使用如下搜索:


Query: chief AND officer


但是这样会搜索到不相关的文档。比如有一条文档是One chief concern arising from the incident was the safety of the police officer on duty 就会被搜索出来


solr对这种问题,提出了近似搜索的解决方案。可以使用如下查询方式


Query: "chief officer"~1


chief 和 officer相距一个距离远

搜索结果: "chief executive officer", "chief financial officer"


Query: "chief officer"~2


chief 和officer 相距两个编辑距离

搜索结果: "chief business development officer", "officer chief"


Query: "chief officer"~N


chief和officer相距N个编辑距离


在我们上一篇的推送中我们讲了短语查询。短语查询可以看作是 “chief officer”~0 的情况,即两个词的挨着。


近似搜索和编辑距离搜索还是有一点差别的。编辑距离搜索中,搜索词和结果可以不同;但是近似搜索中,指定查询的词必须存在,即匹配的文档中,必须准确匹配chief,officer。


总结:以上是solr提供的4中模糊查询方式。所有的模糊查询都是以消耗性能为前提的,能不用尽量不用,能少用尽量少用。


queation:为什么"chief officer"匹配  "officer chief"  需要两个编辑距离。欢迎大家在留言区回答,回答截止时间2017年1月10日 22:00:00,答案获得点赞数最高者获胜。并列点赞数,抄袭情况,最先提交留言者获胜。奖品是笔者藏书。


预告:solr打分公式


小王子:人因为没有根,所以活的很辛苦。


《艳遇SOLR》10--倒排索引的查询--模糊匹配


《solr in action》

   P60~P65

长按二维码


微信讨论组




以上是关于《艳遇SOLR》10--倒排索引的查询--模糊匹配的主要内容,如果未能解决你的问题,请参考以下文章

《艳遇SOLR》8--倒排索引

《艳遇SOLR》7-- 传统数据库在文本搜索中的劣势

《艳遇solr》5--solr6.3.0 AdminUI查询中各参数的含义

倒排索引,正排索引与lucene

es匹配不等于

《艳遇SOLR》6--通过一个Demo,看看solr提供的功能