`
- 浏览:
58074 次
- 性别:
- 来自:
南京
-
对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
相关推荐
Lucene中的SpanQuery和PhraseQuery详解 Lucene是一个功能强大的搜索引擎库,提供了多种查询方式,其中SpanQuery和PhraseQuery是两个重要的查询类型。本文将详细介绍SpanQuery和PhraseQuery的使用和区别。 一、...
总之,Luck 6.5.0 是 Lucene 开发者和管理员的强大辅助工具,它简化了对 Lucene 索引的理解和调试,提高了工作效率,是优化搜索应用不可或缺的一部分。通过深入使用和研究 Luck,我们可以更好地掌握 Lucene 的工作...
Lucene为此提供了`setSlop(int slop)`方法,允许短语中的词汇有一定的位置差距,`slop`就是这个差距的值。例如: ```java query.setSlop(1); ``` 这表示"词1"和"词2"之间可以有一个其他词汇插入,仍然会被视为匹配...
总之,“很好的lucene索引查看工具”是Lucene开发者和研究者的得力助手,它不仅简化了对Lucene索引的理解,也提高了索引管理和优化的效率。通过使用这款工具,用户能够更好地掌握Lucene的工作机制,从而在实践中提升...
首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其拆分为关键词(称为术语或tokens),然后创建一个倒排索引,这个索引关联每个术语到包含它的文档。当用户输入查询时,Lucene会查找这些术语在索引中的...
- 在建立索引之前,需要先将XML文档转换为Lucene能够理解的数据格式。 - 本例中采用SAX解析器来进行XML文档的解析,通过重写SAX处理器类的方法(如`startDocument()`、`endDocument()`、`startElement()`等)来...
为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store.Directory public abstract class ...
在Lucene 5中,支持多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等,以及复杂的组合查询。同时,通过合理设置索引字段,如使用ngram索引、倒排索引等,可以显著提升搜索速度。 六、性能调优 Lucene提供了...
这本书详细介绍了Lucene的核心概念、API以及实际应用案例,帮助读者快速理解和掌握Lucene的使用。 在"lucene_demo"这个压缩包中,很可能包含了一些示例代码或者项目,用于演示如何使用Lucene进行实际的文本搜索开发...
本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、执行查询,并比较默认的TF-IDF相似度与BM25相似度的区别。 首先,我们需要了解什么是Lucene。Lucene是一个由...
Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,主要用Java编写,但也有其他语言的版本。...通过这些代码,开发者可以更好地理解Lucene的工作原理,并将其应用于实际项目中。
《深入理解Lucene 3.6.1 API》 Lucene是Apache软件基金会的一个开源项目,它是一个全文搜索引擎库,提供了高性能、可扩展的信息检索服务。Lucene 3.6.1是其历史版本之一,虽然现在有更新的版本,但3.6.1仍具有重要...
在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...
4. **查询与排序**:Lucene支持多种查询类型,如标准查询解析器(StandardQueryParser)、短语查询(PhraseQuery)、范围查询(RangeQuery)等。同时,我们还可以使用评分函数(ScoreFunction)和自定义比较器...
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
2. **查询解析(Query Parsing)**: 用户输入查询字符串,通过QueryParser转换成Lucene能理解的Query对象。 3. **搜索(Searching)**: 使用Query对象在索引中查找匹配的文档,返回匹配度最高的结果。 4. **评分...
随着版本迭代,Lucene引入了更多的特性,如多字段搜索、更高效的内存管理以及对更多语言的支持。 7. **《Lucene in Action》书籍内容** 这本书详细讲解了Lucene的各个方面,包括安装、基本用法、高级特性和实际...
"lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...
1. **全文检索基础**:书中首先介绍了全文检索的基本概念,包括倒排索引、TF-IDF、布尔查询等,帮助读者建立起对全文检索的理解。 2. **Lucene API**:详细讲解了Lucene的各个核心组件,如Analyzer(分析器)用于...