Lucene6.6.0 案例与学习路线

工头让我去学习Lucene这个全文检索工具,为项目搜索引擎的开发打下基础。花了一周的时间熟悉了Lucene基本API的使用并写了一些案例,在这里先分享一下关于Lucene的学习心得。

1.首先建议参看这篇精简的博文,对Lucene的索引创建和检索功能有个了解。https://www.ibm.com/developerworks/cn/java/j-lo-lucene1/ 需要注意这个博文的jar包是Lucene2.0.0比较老。

2.然后阅读另外一篇比较细致的博文:http://blog.csdn.net/csh624366188/article/details/6823209;这个博文阅读时注意它前面一部分演示Lucene搜索应用的时候用的是Lucene3.0.3;后面大部分案例都是用的Lucene2.0.0 。

3.英文水平还过的去的就可以去APACHE官网读一读Lucene的官方文档,然后再看看核心的API:https://lucene.apache.org/core/6_6_0/index.html 注意这个是6.6.0的。我在github上放了两个Lucene6.6.0的案例,地址:https://github.com/Jethu1/lucene6.git 。

基本原理和主要的包:

对文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。

Lucene 软件包分析

Lucene 软件包的发布形式是一个 JAR 文件,下面我们分析一下这个 JAR 文件里面的主要的 JAVA 包,使读者对之有个初步的了解。

Package: org.apache.lucene.document

这个包提供了一些为封装要索引的文档所需要的类,比如 Document, Field。这样,每一个文档最终被封装成了一个 Document 对象。

Package: org.apache.lucene.analysis

这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。

Package: org.apache.lucene.index

这个包提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类:IndexWriter 和 IndexReader,其中 IndexWriter 是用来创建索引并添加文档到索引中的,IndexReader 是用来删除索引中的文档的。

Package: org.apache.lucene.search

这个包提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法,Hits 用来保存搜索得到的结果。(Lucene6.x中没有了Hits对象 改为了ScoreDoc )。

建立索引

为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory。下面我们分别介绍一下这五个类的用途:

Document

Document 是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document 对象由多个 Field 对象组成的。可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。

Field

Field 对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。

Analyzer

在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的 Analyzer。Analyzer 把分词后的内容交给 IndexWriter 来建立索引。

IndexWriter

IndexWriter 是 Lucene 用来创建索引的一个核心的类,他的作用是把一个个的 Document 对象加到索引中来。

Directory

这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。

搜索文档

利用 Lucene 进行搜索就像建立索引一样也是非常方便的。在上面一部分中,我们已经为一个目录下的文本文档建立好了索引,现在我们就要在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene 提供了几个基础的类来完成这个过程,它们分别是呢 IndexSearcher, Term, Query, TermQuery, Hits. 下面我们分别介绍这几个类的功能。

Query

这是一个抽象类,他有多个实现,比如 TermQuery, BooleanQuery, PrefixQuery. 这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query。

Term

Term 是搜索的基本单位,一个 Term 对象有两个 String 类型的域组成。生成一个 Term 对象可以有如下一条语句来完成:Term term = new Term(“fieldName”,”queryWord”); 其中第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。

TermQuery

TermQuery 是抽象类 Query 的一个子类,它同时也是 Lucene 支持的最为基本的一个查询类。生成一个 TermQuery 对象由如下语句完成: TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参数,那就是一个 Term 对象。

IndexSearcher

IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher 的实例在一个索引上进行操作。

Hits

Hits 是用来保存搜索的结果的。(Lucene6.x之后没有了Hits对象 改为了ScoreDoc 来保存对象)。

时间: 2024-11-10 11:08:19

Lucene6.6.0 案例与学习路线的相关文章

Ext 5.0案例 ~转~学习Extjs 5.0值得一看

/**  * 默认页面  *   * @author leaves.qq:1330771552  */    Ext.define('SupplyManagementDesktop.defaultsWindow', {      extend : 'Ext.ux.desktop.Module',        requires : ['Ext.data.ArrayStore', 'Ext.util.Format', 'Ext.grid.Panel',              'Ext.grid

学习大数据要什么基础?0基础的学习路线和方向

现在大数据这么火,各行各业想转行大数据,那么问题来了,该往哪方面发展,哪方面最适合自己?首先从字面来了解一下大数据 大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产.数据的5V特点(IBM提出):Volume(大量).Velocity(高速).Variety(多样).Value(低价值密度).Veracity(真

React Native 从零到高级- 0基础学习路线

React Native QQ交流群(美团,饿了么,阿里的大神都在里面):576089067 React Native  从0 基础到高级 视频教程正在重录中,要了解最新进度可以关注菜鸟窝微信公众号(下图),旧版视频教程可以点击这里在线学习 学习路线(文章版),江清清老师出品,点击这里关注江清清 ,同时可以关注一下他的课程 基础入门:1.React Native For Android环境配置以及第一个实例2.React Native开发IDE安装及配置3.React Native应用设备运行(

VueJs2.0建议学习路线

最近VueJs确实火了一把,自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新手来说,如何高效快速的学习Vue2.0呢. 既然大家会看这篇文章,那么肯定是vue的学习者了,或是遇到的瓶颈,或者刚刚开始学,不知道如何快速起步,本篇文章将带领大家在最短的时间内构件一个学习Vue的学习路线 Vuejs的作者尤雨溪尤大也写过一篇关于新手学习vue路径的文章新手向:Vue 2.0 的建议学习顺序 百度vuejs搜索的是vue1的文档,推荐大家直接上2.0

Spark1.0.0 学习路线

接触了Spark也快有半年了,版本从0.8.0到现在的1.0.0SNAPSHOT,从头到尾被spark这个优秀的框架深深吸引,也为scala的优雅所折服.4.19日"2014 中国Spark技术峰会"召开,可以看出随着Spark技术的完善,越来越多的企业已经开始使用或开始关注Spark的发展了.回顾学习过程,觉得很有必要整理一份学习路线,对所学的内容加以沉淀,同时也为同行作为参考. 因为Spark1.0.0即将发布,增加了很多特性,所以决定修改以前的博文,全都采用Spark1.0.0,

spark1.1.0学习路线

经过一段时间授课,积累下不少的spark知识,想逐步汇总成资料,分享给小伙伴们.对于想视频学习的小伙伴,可以访问炼数成金网站的<spark大数据平台>课程,每周的课程是原理加实际操作.最新的课程是第3期,至于费用,越认真学习,学习成本越低. 从Spark1.1.0开始,重新规划了一下学习路线,由于涉及的内容比较多,会不断的完善其中的内容,争取在Spark1.2.0形成一个完整的体系,最迟到Spark1.3.0.笔者计划在未来的一年时间内,将大部分的空闲时间都花在Spark学习路线的完善之上.在

大数据新手的0基础学习路线,从菜鸟到高手的成长之路

大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家分享下大数据新手从0开始学习大数据,实现菜鸟到高手的转变的学习路线.希望能够帮助想要学习大数据的朋友. 如果你想要学好大数据最好加入一个好的学习环境,可以来这个Q群529867072 这样大家学习的话就比较方便,还能够共同交流和分享资料 以下是大数据新手学习路线的正文: Linux:因为大数据相关软

云计算学习路线教程大纲课件:tar项目实战案例

云计算学习路线教程大纲课件:tar项目实战案例: ==================================================================================== [[email protected] ~]# yum -y install mariadb-server [[email protected] ~]# systemctl start mariadb [[email protected] ~]# mkdir /backup 案例1

微信开发学习路线

凭借大量活跃用户,微信已成为商家重要营销平台之一.商家为庞大用户群提供定制化服务的迫切需求,吸引了大量开发者/开发商投入到微信公众平台开发中.学习和掌握微信公众平台开发技术,已成为开发者淘金的另一重要选择. 在CSDN站内,拥有大量与微信开发相关的资源,包括技术博客.问题讨论.工具资源等.CSDN邀请多位微信开发专家对这些资源取其精华,按照微信开发的学习路线展示站内优质资源,从基础入门到高级开发,帮你全面掌握微信开发. 这里,我们为您推出的是微信开发的基础入门及高级进阶部分. 基础入门 认识微信