`

对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,就到这里吧,希望对大家有帮助,如果我理解有误,也请指出,谢谢~


分享到:
评论

相关推荐

    lucene中的SpanQuery和PhraseQuery详解(有图示)

    Lucene中的SpanQuery和PhraseQuery详解 Lucene是一个功能强大的搜索引擎库,提供了多种查询方式,其中SpanQuery和PhraseQuery是两个重要的查询类型。本文将详细介绍SpanQuery和PhraseQuery的使用和区别。 一、...

    lucene可视化工具 Luck-6.5.0

    总之,Luck 6.5.0 是 Lucene 开发者和管理员的强大辅助工具,它简化了对 Lucene 索引的理解和调试,提高了工作效率,是优化搜索应用不可或缺的一部分。通过深入使用和研究 Luck,我们可以更好地掌握 Lucene 的工作...

    Lucene 搜索方法(短语搜索)

    Lucene为此提供了`setSlop(int slop)`方法,允许短语中的词汇有一定的位置差距,`slop`就是这个差距的值。例如: ```java query.setSlop(1); ``` 这表示"词1"和"词2"之间可以有一个其他词汇插入,仍然会被视为匹配...

    lucene对数据库操作

    首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其拆分为关键词(称为术语或tokens),然后创建一个倒排索引,这个索引关联每个术语到包含它的文档。当用户输入查询时,Lucene会查找这些术语在索引中的...

    lucene 对 xml建立索引

    - 在建立索引之前,需要先将XML文档转换为Lucene能够理解的数据格式。 - 本例中采用SAX解析器来进行XML文档的解析,通过重写SAX处理器类的方法(如`startDocument()`、`endDocument()`、`startElement()`等)来...

    lucene,lucene教程,lucene讲解

    为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store.Directory public abstract class ...

    lucene5 源码教程

    在Lucene 5中,支持多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等,以及复杂的组合查询。同时,通过合理设置索引字段,如使用ngram索引、倒排索引等,可以显著提升搜索速度。 六、性能调优 Lucene提供了...

    lucene_demo例子

    这本书详细介绍了Lucene的核心概念、API以及实际应用案例,帮助读者快速理解和掌握Lucene的使用。 在"lucene_demo"这个压缩包中,很可能包含了一些示例代码或者项目,用于演示如何使用Lucene进行实际的文本搜索开发...

    Lucene示例 BM25相似度计算

    本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、执行查询,并比较默认的TF-IDF相似度与BM25相似度的区别。 首先,我们需要了解什么是Lucene。Lucene是一个由...

    lucene包,lucene实现核心代码

    Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,主要用Java编写,但也有其他语言的版本。...通过这些代码,开发者可以更好地理解Lucene的工作原理,并将其应用于实际项目中。

    Lucene时间区间搜索

    在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...

    lucene_3.6.1_API

    《深入理解Lucene 3.6.1 API》 Lucene是Apache软件基金会的一个开源项目,它是一个全文搜索引擎库,提供了高性能、可扩展的信息检索服务。Lucene 3.6.1是其历史版本之一,虽然现在有更新的版本,但3.6.1仍具有重要...

    基于lucene的开发JavaEE项目

    4. **查询与排序**:Lucene支持多种查询类型,如标准查询解析器(StandardQueryParser)、短语查询(PhraseQuery)、范围查询(RangeQuery)等。同时,我们还可以使用评分函数(ScoreFunction)和自定义比较器...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    lucene站内搜索

    2. **查询解析(Query Parsing)**: 用户输入查询字符串,通过QueryParser转换成Lucene能理解的Query对象。 3. **搜索(Searching)**: 使用Query对象在索引中查找匹配的文档,返回匹配度最高的结果。 4. **评分...

    lucene in action英文版 lucene 3.30包

    随着版本迭代,Lucene引入了更多的特性,如多字段搜索、更高效的内存管理以及对更多语言的支持。 7. **《Lucene in Action》书籍内容** 这本书详细讲解了Lucene的各个方面,包括安装、基本用法、高级特性和实际...

    lucene学习pdf2

    "lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...

    lucene in action 2nd edition, lucene in action 第二版 PDF

    1. **全文检索基础**:书中首先介绍了全文检索的基本概念,包括倒排索引、TF-IDF、布尔查询等,帮助读者建立起对全文检索的理解。 2. **Lucene API**:详细讲解了Lucene的各个核心组件,如Analyzer(分析器)用于...

    Lucene全文检索引擎

    6. **查询解析器(Query Parser)**:处理用户的搜索请求,将其转化为Lucene可以理解的查询对象。 7. **评分(Scoring)**:Lucene会根据文档与查询的相关性来为搜索结果打分,最相关的文档会首先返回。 **二、...

Global site tag (gtag.js) - Google Analytics