Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601022
  • 博文数量: 129
  • 博客积分: 8026
  • 博客等级: 中将
  • 技术积分: 1300
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-21 14:39
文章分类

全部博文(129)

文章存档

2011年(1)

2007年(26)

2006年(102)

我的朋友

分类:

2006-05-21 15:50:13

开始学习Lucene,今天先了解一下索引建立

主要步骤:提取文本 -> 构建Document –> 分析 -> 建立索引

任何需要进行索引的文件都必须被转化成Document对象才能被索引和搜索.可以将Document对象看成一种虚拟的文件,带有多个数据源(key/value键值对)

建立Document的方法:

import. Org.apache.lucene.document.Document;

import. Org.apache.lucene.document.Field;

import. Org.apache.lucene.document.DateField;

 Document doc = new Document();

//加入path关键字到document对象

Doc.add(Field.Keyword(“path”,”内容”));
 

对于每个Field,有四种类形:

Field.Text :需分词,需索引,可被搜索

Field.Keyword:不分词,需索引,完整储存

Field.UnIndexed:不分词,不索引

Field.UnStored :被分词,被索引,不存储

 

索引类IndexWriter的三个参数

存放路径:可为String path,java.io.File,Directory

1指定路径:c:\\index

2 FSDirectory对象:FSDirectory.getDirectory(path,true);//true表示清空重建

3 RAMDirectory:存于内存,new RAMDirectory();

分析器: 继承自org.apache.lucene.analysis.Analyzer类

是否重建索引,为false时则为增量建立

 

例子:

//创建文档 Document doc = new Document();

Doc.add(Field.Keyword(“name”,”java”));

//建立索引

IndexWriter writer = new IndexWriter(“c:\\index”,new StandardAnalyzer(),true);

//加入文档

writer.addDocument(doc);

writer.close();//必须关闭,执行此行后,索引才将内存中的内容写入磁盘
 
 

在IndexWriter中有一个方法setUserCompoundFile(boolean),可以设置是否使用复合索引

 

合并内存索引和文件系统索引

FSDirectory fsDir = FSDirectory.getDirectory(“c:\\index”,true);

RAMDirectory ramDir = new RAMDirectory();

IndexWriter fsWriter = new IndexWriter(fsDir,new StandardAnalyzer(),true);

IndexWriter ramWriter = new IndexWriter(ramDir,new StandardAnalyzer(),true);

//创建Document对象并加入IndexWriter;过程略

//关闭内存索引

ramWriter.close();

//合并 fsWriter.addIndexes(new Directory[]{fsDir});/

//关闭文件系统索引

fsWriter.close();
 
 

删除索引

IndexReader reader = ndexReader.open(“c:\\index”);

reader.deleter(0);

reader.close();
 


//按field删除

reader.delete(new Term(“name”,”word”));

//删除field name中含有word的字段

恢复被删除的索引

reader.undeleteAll()

 

索引优化:

IndexWriter.optimize();//一般应在大批量索引建立完成后再行调用

 

性能调整参数:IndexWriter实例的属性

mergeFactor:控制把索引从内存写入磁盘时内存最大的Document数,同时控制内存中最大的Segment数,默认为10

maxMergeDocs:限制一个Segment中最大的文档数,大批量建立索引时应该设大,增量时应设小值

maxFieldLength:对field的长度(term的数量)进行限制

 

Segment:lucene索引文件最基本的一个单位

阅读(2990) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-11-18 17:42:53

11111