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()方法这次测试?