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

lucene的PhraseQuery

阅读更多

文章来自: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 ”可以匹配到原句。

分享到:
评论

相关推荐

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

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

    lucene包,lucene实现核心代码

    - `Query`:代表用户输入的搜索条件,如TermQuery、BooleanQuery、PhraseQuery等。 - `ScoreDoc`和`TopDocs`:用于存储搜索结果及其评分,TopDocs包含匹配的文档总数和最高评分的文档集合。 - `Highlighter`:...

    lucene 高级搜索项目

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

    Lucene初探,一个初级的LuceneDemo

    Lucene提供了一系列高级功能,如`BooleanQuery`、`PhraseQuery`、`WildcardQuery`等,可以根据需求灵活使用。 通过学习和实践这个LuceneDemo,你可以对Lucene有一个初步的认识,了解如何创建、索引和搜索文档。随着...

    lucene 最新版本所有jar包

    2. **Lucene-Queries**: 提供了高级查询结构,例如BooleanQuery、PhraseQuery、WildcardQuery等。 3. **Lucene-Suggest**: 该模块提供了自动补全和建议功能,用于提升用户体验。 4. **Lucene-Spatial**: 支持地理...

    lucene实现企业产品检索

    Lucene提供了多种查询类型,如TermQuery、PhraseQuery、WildcardQuery等,可以根据需求选择合适的查询方式。接着,使用`IndexSearcher`执行查询,并通过`TopDocs`获取排名最高的搜索结果。 **4. 高级搜索特性** ...

    lucene站内搜索

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

    lucene_demo例子

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

    lucene5 源码教程

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

    简单的lucene demo

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

    基于lucene的开发JavaEE项目

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

    Lucene 搜索方法(短语搜索)

    总结一下,Lucene的短语搜索通过`PhraseQuery`类提供了一种强大的工具,能够精确匹配文档中词汇的顺序。通过对`DemoData.java`和`PhraseQueryDemo.java`的分析,我们可以了解到如何构建短语查询,设置位置偏移量,...

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

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

    Lucene in Action 2nd Edition

    5. **查询处理**:讨论各种查询语法和查询对象,如TermQuery、BooleanQuery、PhraseQuery等,以及如何编写复杂的查询表达式。 6. **搜索算法**:解释TF-IDF、BM25等评分算法,以及如何调整这些算法以满足特定的搜索...

    最新全文检索 lucene-5.2.1 入门经典实例

    - 表示用户查询的抽象类,例如TermQuery、BooleanQuery、PhraseQuery等。 7. **Searcher**: - 包括IndexSearcher,用于执行查询,返回匹配的Document列表。 8. **ScoreDoc和TopDocs**: - **ScoreDoc**:包含...

    lucene_3.6.1_API

    搜索方面,`IndexSearcher`类是执行查询的主要接口,它可以执行各种类型的查询,如TermQuery、PhraseQuery、BooleanQuery等。`QueryParser`类则提供了一种方便的方式来构造复杂的布尔查询。搜索结果通过`Hits`对象...

    lucene-3.5.0.jar

    - **Query**:用户输入的搜索条件被转化为Query对象,常见的有TermQuery(单个词查询)、BooleanQuery(布尔逻辑组合查询)和PhraseQuery(短语查询)等。 - **TF-IDF**:Lucene使用TF-IDF(词频-逆文档频率)算法...

    lucene4.10.3的api的chm合集

    `lucene-queries-4.10.3.CHM`详细阐述了Lucene的各种查询类型和构造方法,如TermQuery、BooleanQuery、PhraseQuery等,以及如何组合这些查询以实现复杂的检索策略。 `lucene-spatial-4.10.3.CHM`专注于地理空间搜索...

    Lucene3.0.1 官方api

    此外,还可以手动构造复杂的查询,如布尔查询、短语查询、范围查询等,通过`BooleanQuery`, `TermQuery`, `PhraseQuery`等类实现。 5. **搜索过程**:`Searcher`类负责执行搜索操作,其中`IndexSearcher`是最常用的...

    Lucene开发指南

    笔记中可能会介绍各种查询类型,如TermQuery、WildcardQuery和PhraseQuery,并讲解评分机制。 笔记(五)至(八)可能涵盖高级特性,比如多字段搜索、布尔查询、短语匹配、近似搜索以及如何使用SpanQuery进行更精确的...

Global site tag (gtag.js) - Google Analytics