文章来自: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
”可以匹配到原句。
分享到:
相关推荐
本文档详细讲解了各种SpanQuery的用法,以及它跟PhraseQuery的区别
lucene实例lucene实例lucene实例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....
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
Lucene3.0特性Lucene3.0特性
赠送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...
赠送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.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现...
lucene学习教程lucene讲义 叫你用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-...
lucene3源码分析
本书深入浅出地介绍了Lucene——一个开源的使用Java语言编写的全文搜索引擎开发包。它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene 所体现的强大功能。全书共...
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
赠送jar包:lucene-core-6.6.0.jar; 赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene...
Lucene3.5全部源码,打包jar文件,可以直接打开查看源码,Lucene开发必备
c#下实现Lucene时间区间查询匹配。主要还是对Lucene查循对像Query的实现
Annotated Lucene 中文版 Lucene源码剖析
lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0