`
lxwt909
  • 浏览: 570812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene5学习之TermQuery使用

阅读更多

    首先来学习用下TermQuery,这是最简单的一个Query实现,即查询索引文档中是否包含了指定的Term,Lucene官方API注释里是这样说的:

public class TermQuery
extends Query
A Query that matches documents containing a term. This may be combined with other terms with a BooleanQuery.

 那什么又是Term呢?还是看看官方给的解释吧

public final class Term
extends Object
implements Comparable<Term>
A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in. Note that terms may represent more than words from text fields, but also things like dates, email addresses, urls, etc.

 一个Term表示着一个来自文本中的一个单词(因为老外眼里只有单词,没有中文,在中文里word可以理解为一个词语),它是一个搜索单元,它有两部分组成,单词文本和域的名称,后面着重提醒了我们,term不仅仅是文本中单词,还可以是日期,email地址,url链接等等。一句话,Term就是分词过后的一个个词组。

使用的时候new TermQuery(Term term)即可,Term对象的构造器有两个参数,fieldName和fieldValue,如:

new Term("title","Java");即表示在title域里查询包含Java的,示例代码如下:

Query query = new TermQuery(new Term(fieldName,queryString));

 当然你也可以通过QueryParser类来创建我们的Query对象,如:

QueryParser parser = new QueryParser(fieldName, new AnsjAnalyzer());
Query query = parser.parse(queryString);

    但两者还是有点小小区别的,QueryParser会经过分词器,会使用分词器把我们的queryString(用户输入的查询关键字)进行分词,我们都知道分词器一般都会先把文本先全部转成小写然后去掉停用词等等一系列操作,而TermQuery则不会,而是直接根据用户提供的fieldValue去分词后的Term里查找的,我们知道分词后索引里存储的Term的value肯定都是小写的,如果我们提供的fieldVlue是大写的,肯定是查询不到的,这是大家比较容易忽略的,举个例子吧,比如你的文本里包含了“I服了U”这个网络词汇的,默认肯定是不会把它当成一个词语,如果使用了ansj分词器并把这个词语配置到自定义词典里,如:



 

那么分词后我们索引里的term中存储的应该是i服了u,而不是I服了U,所以如果你们使用I服了U作为搜索关键字来搜索,是搜不到任何结果的,这时你就蒙圈了,我不是已经配置了自定义词典了吗?为什么找不到?为了避免你们犯这种错误,特此提醒,TermQuery不会对你提供的fieldValue做任何处理,而QueryParser会,这也是为什么QueryParser构建的时候需要用户提供Analyzer对象而TermQuery不需要的原因。

    TermQuery使用起来很简单,使用时候该注意的问题我也说过了,就说这么多,打完收工!希望对你们学习Lucene有所帮助。

     如果你还有什么问题请加我Q-Q:7-3-6-0-3-1-3-0-5,

或者加裙
一起交流学习!

  • 大小: 91 KB
分享到:
评论
3 楼 Janle 2015-11-08  
lucene5.X之后的Term删除是不是有bug,
当我删除时候按照new Term("id","1")删除时候出现将所有的索引都删除,不是但删除一个term元素
2 楼 majiedota 2015-07-08  
越看越明白了
1 楼 oaibf 2015-05-27  
a  999是什么意思

相关推荐

    Lucene5学习之FunctionQuery功能查询

    **标题解析:** "Lucene5学习之FunctionQuery功能查询" Lucene5是Apache Lucene的一个版本,这是一个高性能、全文本搜索库,广泛应用于搜索引擎和其他需要高效文本检索的系统。FunctionQuery是Lucene中的一种查询...

    lucene5 源码教程

    总结,Lucene 5为开发者提供了强大且灵活的全文检索功能,通过深入学习其源码,尤其是拼音检索和分词器的运用,可以有效地提升搜索质量和用户体验。不断探索和实践,才能充分挖掘Lucene的潜力,为各种信息检索应用...

    lucene学习-02

    【标题】:“Lucene学习-02” 在深入探讨“Lucene学习-02”这一主题之前,我们先来理解一下Lucene的核心概念。Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,广泛应用于各种搜索引擎和信息检索系统。...

    lucene3.6.1学习

    在 Lucene 中,查询是通过 `Query` 对象表示的,常见的查询类型有 TermQuery、BooleanQuery、PrefixQuery 等。查询对象可以使用 `Searcher` 进行执行,如 `IndexSearcher`,它会返回匹配文档的评分排序结果。测试...

    Lucene 索引的简单使用

    3. **构建Query**:使用QueryParser或者直接创建Query对象,如`new TermQuery(new Term("field", "query term"))`。 4. **执行查询**:使用`indexSearcher.search(query, n)`执行查询,其中n是返回结果的最大数量。...

    lucene3.5学习笔记

    `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等操作的功能。 **1.1.2 Directory** `Directory` 在 Lucene 中代表了存储索引的地方,可以是硬盘上的文件...

    使用Lucene.net进行全文搜索

    本文将深入探讨如何使用Lucene.NET进行全文搜索,特别是针对多关键字匹配的场景。 首先,我们需要了解Lucene.NET的基本概念。Lucene是一个开源的文本搜索库,它的核心功能包括文档索引、搜索和排序。Lucene.NET是这...

    Lucene开发指南

    Lucene学习笔记(二)可能涉及索引构建过程,讲解了如何使用Document对象存储文档内容,Field对象定义字段属性,以及如何使用IndexWriter进行索引更新和优化。 笔记(三)和(四)可能深入到查询解析和执行。查询解析器...

    Lucene在web项目中的应用

    通过学习和实践这个项目,搜索初学者可以深入理解Lucene的工作原理,掌握在实际项目中如何集成和使用Lucene。 总之,Lucene是一个强大的搜索引擎工具,能够有效地帮助Java Web开发者实现复杂的信息检索功能。通过...

    本人的Lucene2.9学习笔记

    在开始使用Lucene之前,首要任务是搭建开发环境。这包括在项目classpath中添加核心库文件——`lucene-core-2.9.1.jar`。有了这个基础,我们便可以进行后续的开发工作。 二、Lucene工作流程 Lucene的工作主要分为两...

    lucene 2.0 api以及lucene 3.0 api

    通过 `API_lucene3.0.0.chm` 文件,开发者可以找到完整的 Lucene 3.0 API 文档,包括类、方法、接口的详细说明,以及示例代码,这对于理解和使用新版本的 Lucene 非常有帮助。 同样,`lucene-2.0.CHM` 文件则提供了...

    lucene学习总结

    在实际应用中,通常会结合使用Lucene和其他库,如Solr或Elasticsearch,来提供更高级的服务,如分布式搜索、多字段搜索、近实时搜索等。 通过以上的学习,我们可以看到Lucene是一个功能强大且灵活的全文检索引擎,...

    Lucene3.0之查询类型详解

    5. **查询类型**: - **TermQuery**:是最基本的查询类型,用于精确匹配单个词,大小写敏感。可以通过TermQuery构造函数或者QueryParser解析字符串创建。 - **RangeQuery**:用于指定一个范围内的查询,如年龄、...

    lucene_demo例子

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

    lucene开发部分例子

    这个压缩包文件“lucene开发部分例子”包含了关于Lucene开发的一些实例,涵盖了从基础到进阶的多个方面,对于学习和理解Lucene的使用非常有帮助。 首先,"Web搜索引擎开发实例"这部分内容将教你如何使用Lucene来...

    Lucene时间区间搜索

    Lucene支持多种查询类型,例如TermQuery、PrefixQuery、RangeQuery等。在时间区间搜索中,我们通常会用到RangeQuery。RangeQuery允许我们在指定的范围内查找匹配的文档,包括或者不包括边界。例如,我们可以创建一个...

    lucene部分常用代码

    为了更好地使用Lucene,需要了解其核心API和常用代码。本文将对Lucene部分常用代码进行详细解释,包括多字段搜索、多条件搜索、过滤等。 多字段搜索 在Lucene中,我们可以使用MultifieldQueryParser来指定多个搜索...

    lucene 全包 包括源码

    3. 查询(Query):用户查询被转换成 Lucene Query 对象,如TermQuery、BooleanQuery等。这些查询对象与索引交互,寻找匹配的文档。解析查询字符串的类,如QueryParser,也是在这个阶段发挥作用。 4. 搜索(Search...

Global site tag (gtag.js) - Google Analytics