读书人

Lucene初步与简单应用

发布时间: 2013-10-08 16:20:52 作者: rapoo

Lucene初始与简单应用

?

Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.它提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是很受欢迎的免费Java资讯检索程式库。因公司需要,所以开始爬资料学习,希望得到更多大神的指点.然后把这块做好!

当前版本为4.2,?官方网站:?http://lucene.apache.org/

?

在全文索引工具中,都是由3部分组成

1.索引部分

2.分词部分

3.搜索部分

?

建立索引的步骤

1.创—irectory

2.创建IndexWriter

3.创—ocument对象

4.为Document添加Field

上面实例中在内存中创建索引.也可以在硬盘上创建索引:

?

搜索操作的步骤:

1.创—irectory

2.创建IndexReader

3.根据IndexReader创建IndexSearcher

4.创建搜索的Query

5.根据Searcher搜索并且返回TopDocs

6.根据TopDocs获取ScoreDoc对象

7.根据Seacher和ScoreDoc对象获取具体的Document对象

8.根据Document对象获取需要的值

9.关闭IndexReader

); } //9.关闭IndexReader indexReader.close(); } catch (Exception e) { // TODO: handle exception }}

文档Document和域Field的关系

文档Document相当于关系表中的每一条记录,域相当于表中的每一个字段,先创建文档,之后为文档添加域.

域存储选项和域索引选项,均需要在域添加的时候设置

?

存储域选项

Field.Store.YES表示把这个域中的内容完全存储到文件中,方便进行文本的还原

Field.Store.NO表示把这个域中的内容不存储到文件中,但是可以被索引,此时内容无法还原(即无法document.get());

?

索引域选项

Field.Index.ANALYZED:进行分词和索引,适用于标题和内容等

Field.Index.NOT_ANALYZED:进行索引,但是不进行分词,像身份证号,姓名,ID等,适用于精确索索

Field.Index.ANALYZED_NO_NORMS:进行分词但是不存储norms信息,这个norms中包括了创建索引的时间和权值等信息

Field.Index.NOT_ANALYZED_NO_NORMS:即不进行分词也不存储norms信息

Field.Index.NO:不进行索引??

?

最佳实践

Field.Index.NOT_ANALYZED_NO_NORMS,?Field.Store.YES标识符(主键,文件名),电话号码,身份证号,姓名,日期

Field.Index.ANALYZED,?Field.Store.YES文档标题和摘要

Field.Index.ANALYZED,?Field.Store.NO文档正文

Field.Index.NO,Field.Store.YES文档类型,数据库主键(不进行索引)

Field.Index.NOT_ANALYZED,Field.Store.NO?隐藏关键字

?

删除文档操作

indexWriter.deleteDocuments()文档并不会完全被删除,而是存储在一个回收站中,我们可以编写查询类来进行查询

indexReader.numDocs()); System.out.println("总存储量:" + indexReader.maxDoc()); System.out.println("被删除的文档:" + indexReader.numDeletedDocs()); } catch (Exception e) { e.printStackTrace(); } }

测试程序

使用IndexReader可以有效的恢复删除到回收站的文档

如果要清空回收站中的内容,需要使用IndexWriter中的forceMergeDeletes()方法

这次测试

?

读书人网 >编程

热点推荐