日期:2014-05-16  浏览次数:20436 次

Lucene学习笔记2--建立和数据库对应的索引
比如将数据的数据生成索引文件,查询出来的数据以list返回,则
1、定义分词器,lucene自带的分词器为标准分词器,StandardAnalyzer,
但我们这里要讲的是中文分词器--IK_CAnalyzer ikAnalyzer = new IK_CAnalyzer();

/* 创建索引初始化,执行这些语句将创建或清空c:\\index\\目录下所有索引 */
File file = new File(path);
if (file.isDirectory()) {
file.delete();
}

//中文分词器
IK_CAnalyzer ikAnalyzer = new IK_CAnalyzer();
IndexWriter writer1 = new IndexWriter(path, ikAnalyzer, true);
writer1.close();

IndexWriter writer2 = new IndexWriter(path, ikAnalyzer, false);
//这里的false表示在新建索引文件时要删除旧的索引文件,true表在旧的索引文件中追加新的索引记录
for (int i = 0; i < list.size(); i++) {
Document doc = new Document();
//这里的field代表数据库中某个表的列
Field field1 = new Field(ArticleTitle, "这里录入列对应的值",Field.Store.YES, Field.Index.TOKENIZED);
doc.add(field1);
Field field2 = new Field(ArticleText,"这里录入列对应的值", Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field2);
Field field3 = new Field(ArticleTime,"这里录入列对应的值" , Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field3);
..........
// 在这里还可以添加其他域
/* 添加这份文件到索引 */
writer2.addDocument(doc);
}
说明:
/*
* 创建一个域ArticleTitle,并往这个域里面添加内容 "Field.Store.YES"表示域里面的内容将被存储到索引
* "Field.Index.TOKENIZED"表示域里面的内容将被索引,以便用来搜索 Lucene给文档的字段设定三个布尔变量:
* 索引(indexed), 存储(stored), 切词(tokenized) ,
*/