Lucence初学小记
一. 流程
1.索引流程:采集数据 --> 构建文档对象 -->创建索引(文档写入索引库)
2.搜索流程:创建查询 --> 执行搜索 --> 渲染结果
二. 具体过程
1. 索引流程
(1) 构建索引库
Directory directory = FSDectory.open(new File("索引"));
(2) 指定分词器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENCE_40)
Version.LUCENCE 一般填目前最高版本
(3)创建文档对象,并添加相关字段值
Document doc = new Document();
doc.add(new Field("stu",stu.getId,Store.YES,Index.NOT_Analyzed));
其中,stu是属性名,stu.getId是属性值
Store.YES 当前字段存入文档 , Store.NO 当前字段不存入文档
ANALYZED 当前字段建立索引,并进行分词,会产生多个term
NOT_ANALYZED 当前字段建立索引,不进行分词,整体一个term
NO 不创建索引
(4)创建索引库操作对象,添加文档,提交
IndexWriter indexWriter = new IndexWriter(directory,analyzer,MaxFieldLength.LIMITED);
其中,MaxFieldLength 用于限制field大小,可以有计划的对大文档Field进行截取。
(5)关闭操作对象
indexWriter.close();
2.搜索流程
(1)打开索引库
Directory directory = FSDirectory.open(new File("索引"));
(2)创建查询分词器(版本号要与写入时的保持一致)
Analyzer analyzer = new StardardAnalyzer(Version.LUCENCE_40);
(3)创建查询解析器,参数位版本号,查询字段名,分词器
QueryParser parser = new QueryParser(Version.LUCENCE_40,"stu",analyzer); //分词器版本号,参数名,分词器
(4)构建查询信息对象
Query query = parse.parse(keyWord); //关键字
(5)构建查询工具
IndexSearcher searcher = new IndexSeacher(directory);
(6)通过查询工具执行查询
TopDocs topdocs = searcher.seach(query,10); //查询信息对象,返回的记录数
TopDocs 包括总记录数,文档重要信息(编号等)的列表等
(7)根据文档编号遍历真正的文档
ScoreDoc scoredoc = topdocs.scoreDocs[i];
int no =scoredocs.doc; //取出编号
// ScoreDoc []scoredocs = topdocs.scoreDocs;
Document document = indexSearch.doc(no);
String stu = document.get("stu");
(8)转为Java对象
(9)关闭查询操作对象
search.close();
Life is fantastic!