《艳遇SOLR》10--倒排索引的查询--模糊匹配
Posted 金沙数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《艳遇SOLR》10--倒排索引的查询--模糊匹配相关的知识,希望对你有一定的参考价值。
SOLR提供了4中模糊匹配得功能,但是所有的模糊匹配都是在消耗性能的前提下进行的。所以选择模糊匹配功能,要慎重。
在《solr in action》这本书中,以英文单词为例。比如以off 开头的英文单词,可以是office,officer,official,officiate等等。本文中以10个以”爱“开头的成语来举例说明solr的模糊搜索。
通配符搜索
* 匹配零个或者多个
Query: name:爱*
? 匹配一个字符
Query:name:爱?分明
通配符开头的查询
当执行name:爱?分明这个通配符查询的时候,①在倒排索引列表中匹配所有一爱开头的词,②再结果中按照通配符的规则再去匹配。因此在①步骤中,匹配的词越少,查询速度越快。比如查询爱才如* 肯定比查询爱*要快,因为后者要匹配所有以爱开头的词。
以通配符开头的查询是一种非常耗费资源的操作。solr提供一种解决方案,创建索引的时候配置ReversedWildcardFilterFactory。配置了ReversedWildcardFilterFactory后,创建的索引为
爱不忍释 爱财如命 爱才如命 ……
#释忍不爱 #命如财爱 #命如才爱 #……
也就是说在创建索引的时候,创建一份反序索引。这样做虽然解决了查询时的资源消耗,但是消耗转义到了索引的创建上。很符合能量守恒定律--能量既不会凭空产生,也不会凭空消失,它只会从一种形式转化为另一种形式,或者从一个物体转移到其它物体,而能量的总量保持不变。
短语查询不能使用通配符
这里所说的短语查询是上一篇文章中我们提到的短语查询。本例中4字程序是做一个一个词来存储的,并不是短语。如图
范围搜索
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的文档
查询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 in action》
P60~P65
长按二维码
微信讨论组
以上是关于《艳遇SOLR》10--倒排索引的查询--模糊匹配的主要内容,如果未能解决你的问题,请参考以下文章