`
zhengchao860730
  • 浏览: 62662 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

关于Lucene搜索中查询器 PhraseQuery 的解释

 
阅读更多

    这几天看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,表示quickfox这两项之间最大可以允许有一个单词的间隔,这样所有“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:我们主要看lazyquick,但是由于jumped是在中间,所以移动的时候还是要把jumped考虑在内,原句里lazyquick的关系是: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,就到这里吧,希望对大家有帮助,如果我理解有误,也请指出,谢谢~

 

转自 : http://myzhangjl.blog.sohu.com/95911870.html

分享到:
评论

相关推荐

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

    Lucene中的SpanQuery和...SpanQuery 和 PhraseQuery 都是 Lucene 中强大的查询工具,旨在帮助开发者快速构建高效的搜索引擎。但是,它们的使用场景和实现机制有所不同,需要根据实际情况选择合适的查询方式。

    lucene实现企业产品检索

    在本文中,我们将深入探讨如何使用Lucene来实现一个类似当当网的企业产品检索系统,特别关注如何结合庖丁解牛分词器提升搜索体验。 首先,我们需要理解Lucene的基本工作原理。Lucene的核心是建立索引,将原始文本...

    Lucene分词与查询详解

    Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。它提供了一套强大的API,用于索引文本数据,并执行复杂的查询操作。在深入理解Lucene的分词与查询机制之前,我们需要了解以下几个核心概念: 1...

    Lucene 搜索方法(短语搜索)

    首先,短语搜索是Lucene中的一种高级查询类型,它允许用户搜索包含特定词汇顺序的短语。例如,如果用户想搜索"大数据分析",而不是仅仅搜索"大数据"或"分析",那么短语搜索就显得尤为重要,因为它可以排除掉那些词汇...

    lucene站内搜索

    2. **查询优化**: 使用过滤器(Filter)、布尔查询(BooleanQuery)和短语查询(PhraseQuery)等提高查询效率。 3. **缓存策略**: 利用Lucene的缓存机制,如BitSetDocValues缓存,提升搜索速度。 4. **结果相关性*...

    lucene 高级搜索项目

    Lucene支持多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等,可以组合使用以满足复杂查询需求。 **6. Lucene 插件和扩展** `05_lucene_plugin`可能讨论了Lucene的扩展机制。Lucene允许开发人员编写自定义...

    一个关于lucene实例

    6. **查询(Query)**:Lucene支持多种查询类型,如TermQuery(匹配特定术语)、BooleanQuery(组合多个查询条件)、PhraseQuery(短语查询)等。 7. **评分(Score)**:Lucene使用TF-IDF算法计算每个匹配文档的相关性...

    lucene高级智能查询小案例

    本篇将通过一个小案例,探讨Lucene在高级智能查询中的应用,尽管案例中可能存在一些小瑕疵,但主要的功能与思路已得以体现。 Lucene的核心在于其建立倒排索引的能力,这种索引结构使得快速匹配大量文档成为可能。...

    lucene5 源码教程

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

    Lucene搜索实例

    Lucene 提供了丰富的查询构造器,如 TermQuery、WildcardQuery 和 PhraseQuery 等。以下是一个简单的查询示例: ```java Query query = new TermQuery(new Term("content", "搜索关键词")); try (IndexReader ...

    lucene高级搜索进阶项目_03

    在本项目"Lucene高级搜索进阶项目_03"中,我们将深入探讨Apache Lucene这一强大的全文搜索引擎库。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索功能,使得开发者能够轻松地在应用程序中实现复杂的搜索...

    基于lucene的开发JavaEE项目

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

    Lucene视频教程_讲解部分源码

    3. **查询解析与执行**:用户输入的查询字符串会被解析成查询对象,Lucene提供多种查询类型,如布尔查询(BooleanQuery)、短语查询(PhraseQuery)和模糊查询(FuzzyQuery)。查询执行过程中,Lucene会根据倒排索引...

    lucene api

    Lucene支持多种查询类型,如布尔查询(BooleanQuery)、短语查询(PhraseQuery)、范围查询(RangeQuery)等,以及复杂的组合查询。 5. **搜索与评分**:使用Query对象在索引中搜索匹配的文档,Lucene会返回一个...

    lucene4.10.3的api的chm合集

    这些解析器将用户输入的查询字符串转化为Lucene可以处理的查询对象,是构建用户友好搜索界面的关键组件。 `lucene-analyzers-phonetic-4.10.3.CHM`包含了语音编码分析器,用于实现模糊匹配和拼写纠错。例如,...

    Lucene in Action 2nd Edition

    《Lucene in Action 2nd Edition》是关于Apache Lucene搜索引擎库的一本权威指南,由Manning出版社出版,于2010年6月推出了MEAP(Manning Early Access Program)新版。这本书深入浅出地介绍了如何利用Lucene进行...

    lucene-3.6.0

    Apache Lucene是一个高性能、全文本搜索库,它提供了完整的搜索引擎功能,包括索引、查询解析、排名等。在本文中,我们将深入探讨Lucene 3.6.0版本的核心特性,帮助开发者更好地理解和应用这个强大的开源项目。 一...

    简单的lucene demo

    3. **查询类型**:Lucene支持多种查询类型,包括布尔查询(BooleanQuery)、短语查询(PhraseQuery)、范围查询(RangeQuery)等,可以根据实际需求构造复杂的查询表达式。 4. **排序与评分**:Lucene不仅可以找到...

    lucene_demo例子

    5. **查询构造**:学习使用QueryParser创建标准查询,以及如何使用TermQuery、BooleanQuery、WildcardQuery、PhraseQuery等不同类型的查询来满足复杂搜索需求。 6. **搜索执行**:通过Searcher对象执行查询,获取...

    lucene-2.4.0-src.zip

    Apache Lucene 是一个高性能、全文本搜索引擎库,由Java编写,它为开发者提供了在应用程序中实现全文搜索功能的基本工具。Lucene 2.4.0 版本是这个项目历史上的一个重要里程碑,它包含了丰富的特性和改进。本文将...

Global site tag (gtag.js) - Google Analytics