文档章节

Lucene基本API组件的理解

北风刮的不认真了
 北风刮的不认真了
发布于 2014/10/30 11:01
字数 1438
阅读 14
收藏 1

本篇转自http://qindongliang.iteye.com/blog/1921685转载时请注明出处!

 

 

前面几篇笔者已经把Lucene的最基本的入门,介绍完了,本篇就对Lucene基本的知识做一个总结,以便于加深对Lucene基本API组件的理解。 

为了方便对比学习,下面给出表格数据 

索引期间使用的API组件 检索期间使用的API组件
IndexWriter IndexReader
IndexWriterConfig IndexSearcher
Directory Directory
Analyzer QueryParser或者Query子类
Document TopDocs
Field ScoreDoc--Term      




下面笔者就对上图组件一一剖析下 

首页要介绍的就索引期间的各个类 
1,IndexWriter是索引过程中的核心类,主要负责创建索引或者打开已有索引,提供对索引的 
添加,删除,修改等操作 
2,IndexWriterConfig这个API在低版本的Lucene中是没有此配置类的,这个类也比较重要,使用此类则需要在其构造方法中传入2个参数,第一个参数是Lucene当前的版本号,第二个是索引是使用的分词器,除了这个我们最常用的功能,里面还提供了大量工具方法,例如,设置内存里缓冲大小,设置文档数据批量提交时大小,获取线程状态,设置创建模式,以及是否开启复合索引的等等一系列,可以对索引做一些基本的配置优化等信息。 
3,Directory这个类代表了Lucene索引的存放位置,是一个抽象类,它有一系列子类可以用来处理索引,使用不同的子类对于系统的性能,影响会很大,但归其本质上,提升性能,无非就拿空间换时间或拿时间或空间2中情况,在具体使用时,我们可以使用其子类来获取索引所在的存储路径,然后将其传给IndexWriter类构造方法里。 
4,Analyzer这个类也是所有分析器的基类,文本文件在索引前,需要经过分析器处理,处理成对应的语汇单元,统一格式,它能提取有效的信息,过滤掉一些禁用词,Lucene自带有几个分析器,但大部分都是对英文或欧洲语言处理的,如果想要使用中文的分词器,可以使用其自带的SmartCN分词器,也可以用开源的IK,messeg4j等等,选择什么样的分析器是索引过程中很重要的一步,这个关键还得看自己的业务需求定。 
5,Document代表一个文档的意思,类似于数据库的一行记录,我们可以向文档中,添加自己想要的域字段,然后在把一个个文档索引起来,提供检索。 
6,Field就是文档中存储的域,每一个域都有一个域名和域值,这就类似数据库的字段名跟值一样,我们可以使用Field来精确控制各个域的值,最常用的有2个Field,一个是不提供分词的StringField和另外一个分词的TextFiled,当然还有其他的一些Field,在这里就不多介绍了。 
7,IndexReader这个类用来获取Directory的子类打开的索引文件流,然后在将进IndexSearcher的构造方法里,进行查询组件的初始化操作,这个类再低版本的的Lucene里也是不存在的,在后来新的版本里才添加的类。 
8,IndexSearcher这个类是程序搜索期间的核心类,是连接索引的桥梁,它是以只读的方式打开索引,提供了大量检索,排序,过滤的等等以及其他的一些功能。 
9,QueryParser或Query都可以完成一些检索功能,不同的是QueryParser提供的功能更为强大,方便自定义开发一些检索方案,而Query及其麾下的一系列子类是Lucene中自带的一些API,使用这些API,大部分情况下都可以完成一些基本的检索,如果需要定制化自己的检索方案则需要使用QueryParser,大多数情况下,我们最常使用的是Query下面的TermQuery子类,当然还有其他大量的特定功能的Query子类存在。 
10,TopDocs这个类是一个简单的容器指针,它一般会记录前N个检索的结果,在TopDocs中,它只会存储这个文档的docid以及获取的得分情况,另外这前N个结果,默认的排序方式,是按照得分的大小排列的。 
11,ScoreDoc类通常我们使用的是一个数组,它里面也只会包含这个文档的docid以及获取的得分情况,与TopDocs不同的是,我们可以使用这个类,来进行类似数据库的分页操作,当然你得保证你有足够的内存,如果是海量数据的分页,这个操作很容易造成内存溢出,这时候我们就需要考虑其他方法了。 
12,Term类是搜索功能最基本的单元,与Field类似,检索的时候需要传入域名及检索的字符串,是一个小而不可或缺的精简类。 



至此,笔者已经对Lucene的基本的常用的几个类简单的剖析了一下,可能大多数情况下,我们知道他们怎么用,但是就是不太了解他们的基本概念。笔者觉得,如果真正的理解了这些东西,就可以在开发中或给同事的一些交流中带来极大的方便。

本文转载自:http://song571377.iteye.com/blog/2104505

北风刮的不认真了

北风刮的不认真了

粉丝 36
博文 53
码字总数 27105
作品 1
朝阳
后端工程师
私信 提问
Lucene4.7 索引和检索的常用API(二)

前面几篇笔者已经把Lucene的最基本的入门,介绍完了,本篇就对Lucene基本的知识做一个总结,以便于加深对Lucene基本API组件的理解。 为了方便对比学习,下面给出表格数据 索引期间使用的API...

一枚Sir
2014/04/10
0
0
Lucene4.3开发之第三步之温故知新(三)

本篇就对lucene的基本知识进行一个总结,以便于加深对lucene基本api组件的理解。 1、IndexWriter:是索引过程的核心类,主要负责创建索引或者打开已有索引,提供索引的增删改等操作。 2、Ind...

heroShane
2014/02/20
0
0
Apache Lucene全局搜索引擎入门教程

Lucene简介 Lucent:Apache软件基金会Jakarta项目组的一个子项目,Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其...

Javahih
2018/04/19
0
0
Alfresco开发文档 - 系统架构简介

要使用Alfresco做开发,首先了解一下Alfresco的整个系统架构,在此之前,最好了解一下Java开发的基本知识和Spring框架。当然,你不必是这方面的高手,只要了解一下就行,以免这里介绍的内容你...

YipChooli
2010/04/09
4.9K
10
【重出江湖】开发自己的搜索引擎Lucene+Heritrix(第二版)

【重出江湖】开发自己的搜索引擎Lucene+Heritrix(第二版) 搜索引擎技术经典图书《开发自己的搜索引擎Lucene+Heritrix(第二版)》再次推出 本书是一本介绍搜索引擎开发的书籍,通过本书,读...

youlechang
2009/12/24
4.4K
9

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部