LUCENE 读书笔记 20070704

 
2007-7-4
声明:这只是我的学习笔记,有很多理解不对的地方,发在这里主要是想请大家帮忙看看我的理解有啥不对的地方,不能作为教程看啊…………
创建索引
前面已经创建了Document和Field,那么如何存储创建好的索引呢?这是通过IndexWriter实现的。
IndexWriter在创建的时候需要指定索引文件所在目录参数、分析器参数(用来在进行索引的时候对文本进行分析,用来进行将索引字段进行切词的操作)、是否重新创建索引操作(如果为true,则清空重建,false则是增加在其基础上增加索引)
同时向一个目录下进行索引写操作时,只能由一个IndexWriter进行操作,如果多个IndexWriter会造成同步问题。 注意这里说的是同一个 IndexWriter ,也就是说多个线程操作揖个 IndexWriter 的写入方法是可以的喽??
 
接下来讲的例子给出了创建索引的过程。最重要的是不要忘了在结束的时候调用close()函数,只有调用了此函数之后,才会将存放于内存中的数据保存到硬盘上。
看列出的IndexWriter源代码,在addDocument()方法中使用了synchronized防止了多线程同时访问的问题。
 
 
性能的调整:
在将索引数据写入磁盘的时候,可以通过三个参数对性能进行优化:
在进行之前需要说的一个概念就是Segment,他是索引文件中最大的一个单位。它是有多个Document(或者Segment)合并起来的。具体格式后面会讲到
1 mergeFactor :这个参数设置了写入磁盘时内存中最大的 Document 数量,用来设置多少个 Document 对象可以被预先缓存在内存中,然后将它们一起写入磁盘,默认值为 10 个;
举例说明:假设设置为 10 ,每当 10 Document 被添加入索引后,将创建一个段(segment<长度为10> );每当凑齐了长度为 10 10 个段时,则会创建整合成一新的段(长度为 100 ),依此类推
所以,较高的 mergeFactor 值会占用较多的内存,但会在写入时减少对磁盘的访问。通常会加速创建索引的过程,较高的 mergeFactor 会导致查询速度变慢,因为查询时会从一个较大的索引文件中读取。
2 maxMergeDocs 定义了一个段中最大的 Document 数量,以防止单个 Segment 无限扩充下去。
较高的 maxMergeDocs 适合于批量索引,适合于新创建索引。创建索引的速度快,但占用的内存比较多;较小的值适合于增量式增加索引。
3   minMergeDocs :控制了存储到一个段前,被缓存的 Document 的数量,这将影响到段在磁盘上的大小,此参数也会改善索引的速度,但是过大会导致内存溢出
 
这块有点晕,好像两本书讲的不大一样,也可能是俺英文差,没看懂。好像这三参数只是用来在创建索引的时候用。但是这几个参数设置了之后创建出的索引文件是一样的吗?检索效率一样吗?这里需要重看看以后,估计有问题。
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值