`
- 浏览:
56714 次
- 性别:
- 来自:
南京
-
对Lucene PhraseQuery的slop的理解(转载)
文章来自:http://myzhangjl.blog.sohu.com/95911870.html
这几天看Lucene,看到检索那块,被PhraseQuery折腾了一阵,那本《Lucene In Action》里的代码版本太旧了,也不知是翻译的问题还是我的理解问题,总之在看PhraseQuery的设置slop时费了半天劲,不过,总算是搞明白了,发个帖子来分享一下:
所谓PhraseQuery,就是通过短语来检索,比如我想查“big car”这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语,这个document就算匹配成功。可如果待匹配的句子里包含的是“big black car”,那么就无法匹配成功了,如果也想让这个匹配,就需要设定slop,先给出slop的概念:slop是指两个项的位置之间允许的最大间隔距离,下面我举例来解释:
我的待匹配的句子是:the quick brown fox jumped over the lazy dog.
例1: 如果我想用“quick fox”来匹配出上面的句子,我发现原句里是quick [brown] fox,就是说和我的“quick fox”中间相差了一个单词的距离,所以,我这里把slop设为1,表示quick和fox这两项之间最大可以允许有一个单词的间隔,这样所有“quick [***] fox”就都可以被匹配出来了。
例2:如果我想用“fox quick”来匹配出上面的句子,这也是可以的,不过比例1要麻烦,我们需要看把“fox quick”怎么移动能形成“quick [***] fox”,如下表所示,把fox向右移动3次即可:
fox quick
1 fox|quick
2 quick fox
3 quick fox
例3:如果我想用“lazy jumped quick”该如何匹配上面的句子呢?这个比例2还要麻烦,我们要考虑3个单词,不管多少个单词,slop表示的是间隔的最大距离,详细起见,我们分别来看每种组合:(我的待匹配的句子是:the quick brown fox jumped over the lazy dog.)
•lazy jumped:原句是jumped [over] [the] lazy,就是说它们两个之间间隔了2个词,如下所示:需要把lazy向右移动4位
lazy jumped
1 lazy|jumped
2 jumped lazy
3 jumped lazy
4 jumped lazy
• lazy jumped quick:我们主要看lazy和quick,但是由于jumped是在中间,所以移动的时候还是要把jumped考虑在内,原句里lazy和quick的关系是:quick [brown] [fox] [jumped] [over] [the] lazy ,quick lazy中间间隔了5个词,所以如下图所示,把lazy向右移动8次
lazy jumped
quick
1 lazy|jumped quick
2 jumped lazy|quick
3 jumped quick lazy
4 jumped quick lazy
5 jumped quick lazy
6 jumped quick lazy
7 jumped quick lazy
8 jumped quick lazy
• 最后是jumped qucik,这里不详细画表格了,大家可以自己试试,应该是把jumped向右移动4次。
综合以上3种情况,所以我们需要把slop设为8才令“lazy jumped quick”可以匹配到原句。
OK,就到这里吧,希望对大家有帮助,如果我理解有误,也请指出,谢谢~
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文档详细讲解了各种SpanQuery的用法,以及它跟PhraseQuery的区别
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store.Directory public abstract class ...
对lucene的封装对lucene的封装 对lucene的封装 对lucene的封装
lucene 对 xml建立索引 建立索引就是怎么简单 呵呵
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
c#下实现Lucene时间区间查询匹配。主要还是对Lucene查循对像Query的实现
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
对于初学者很快掌握lucene 该文档详细的介绍了如何使用lucene 以及快速理解掌握lucene
Lucene3.0特性Lucene3.0特性
关于lucene对数据库建立索引和进行查询。这方面的东西太少了。大家应该多上传一些资料。
第2部分Lucene的应用,通过对Lucene内置工具的介绍,展示了Lucene技术的高级应用和在各种程序语言上的移植。. 本书既可作为学习材料,又可以作为参考手册。它适合于已经熟悉基本Java编程的读者,以及希望能够把强大...
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
lucene学习教程lucene讲义 叫你用lucene算法
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
lucene3源码分析
本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现...
赠送jar包:lucene-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...
lucene-analyzers-common-4.2.0.jar; lucene-analyzers-kuromoji-4.2.0.jar; lucene-analyzers-phonetic-4.2.0.jar; lucene-codecs-4.2.0.jar; lucene-core-4.2.0.jar; lucene-grouping-4.2.0.jar; lucene-...
Annotated Lucene 中文版 Lucene源码剖析