Lucene4.3开发之第三步之温故知新(三)

    本篇就对lucene的基本知识进行一个总结,以便于加深对lucene基本api组件的理解。

Lucene4.3开发之第三步之温故知新(三)

1、IndexWriter:是索引过程的核心类,主要负责创建索引或者打开已有索引,提供索引的增删改等操作。

2、IndexWriterConfig:这个api在低版本的lucene中是没有此配置类的,这个类也比较重要,使用此类则需要在其构造方法中传入2个参数,第一个参数是lucene当前的版本号,第二个是索引使用的分词器,除了这个我们最常用的功能,里面还提供了大量工具方法,例如,设置内存里缓冲大小,以及是否开启复合索引的等等一系列,可以对索引做一些基本的配置优化等信息。

3、Directory:这个类代表了lucene索引的存放位置,是一个抽象类,它有一系列子类可以用来处理索引,使用不同的子类对于系统的性能,影响会很大,但归其本质上,提升性能,无非就拿空间换时间,或拿时间换空间两种情况,在具体使用时,我们可以使用其子类来获取索引所在的存储路径,然后将其传给IndexWriter类构造方法里。

4、Analyzer:这个类也是所有分析器的基类,文本文件在索引前,需要经过分析器处理,处理成对的语汇单元,统一格式,它能提取有效的信息,过滤掉一些禁用词。lucene自带有几个分析器,但大部分都是对英文或欧洲语言处理的,如果想要使用中文的分词器,可以使用自带的SmartCN分词器,也可以使用开源IK、messeg4j等等,选择什么样的分词器是索引过程中很重要的一步,这个关键还得看自己的业务需求。

5、Document:代表一个文档的意思,类似于数据库的一行记录,我们可以向文档中,添加自己想要的域字段,然后把一个个文档索引起来,提供检索。

6、Field:就是文档中存储的域,每一个域都有一个域名和域值,这就类似数据库的字段名跟值一样,我们可以使用Field来精确控制各个域的值,最常使用的有2个Field,一个是不提供分词的StringField和另一个分词的TextField,当然还有其他的一些Field。

7、IndexReader:这个类用来获取Directory的子类打开的索引文件流,然后将进IndexSearch的构造方法里,进行查询组件的初始化操作,这个类再低版本的lucene里也是不存在的,在后来新的版本里才添加的类。

8、IndexSearch:这个类是程序搜索期间的核心类,是连接索引的桥梁,它是以只读的方式进行索引,提供大量的检索,排序,过滤的等等以及其他的一些功能。

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)