csusky
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
AJAX
(rss)
HIBERNATE(1)
(rss)
J2EE(3)
(rss)
JAVA基础(8)
(rss)
JAVA非阻塞编程(2)
(rss)
JDBC(2)
(rss)
LUCENE(13)
(rss)
NOTE(1)
(rss)
ORACLE(1)
(rss)
PL/SQL
(rss)
SPRING
(rss)
STRUTS
(rss)
随笔档案
2009年11月 (1)
2008年12月 (1)
2008年11月 (2)
2008年10月 (1)
2008年5月 (4)
2008年4月 (11)
2008年3月 (2)
2008年2月 (10)
阅读排行榜
1. JDBC中的连接方式 thin模式 和 DataSource方式(3697)
2. SPRING整合IBMMQ实现全局事物(2404)
3. TREEMAP的排序机制(2091)
4. JMS基础(2084)
5. ORACLE的块大小(1755)
评论排行榜
1. Lucene的切词 analysis包(1)
2. 异步IO的关闭事件(1)
3. TREEMAP的排序机制(1)
4. JDBC中的批处理(1)
5. JMS基础(1)
常用链接
我的随笔
我的评论
我的参与
最新评论
统计
随笔 - 32
文章 - 0
评论 - 5
引用 - 0
最新评论
1. re: TREEMAP的排序机制[未登录]
不错,不错!
--xxx
2. re: 异步IO的关闭事件
好文,帮助很大,就是如何判断通道关闭了
--daimojingdeyu
3. re: Lucene的切词 analysis包
强,真是我需要的
--啊啊啊
4. re: JMS基础
不错,谢谢共享
--hushuili
5. re: JDBC中的批处理
ddddddddd
--反反复复
关于IndexWriter中的3个性能参数
在
IndexWriter
中有3个重要的性能参数
mergeFactor 默认为10
minMergeDocs 默认为10
maxMergeDocs 默认为Integer.maxValue
maxMergeDocs 一个段中所能包含的最大的doc数,达到这个数目即不再将段进行合并 一般不改变这个值
minMergeDocs 是指在RAMDirectory中保存的Doc的个数,达到minMergeDocs 个即要合并到硬盘上去(在硬盘上新建一个段)
mergeFactor 合并因子,是控制硬盘上的段的合并的,每次在硬盘上新建一个段之后即执行
targetMergeDocs
*=mergeFactor(一开始
targetMergeDocs
=minMergeDocs) 如果硬盘上的doc数目大于等于
targetMergeDocs则将硬盘上最后建立的mergeFactor个段进行合并成一个段
拿默认的参数举例:
如果硬盘上面已经有9个段 每个段分别存储了10个Document,共(90个DOC),这时候如果程序再向硬盘合并一个新的段(含10个DOC),合并完之后
targetMergeDocs
=10*10 程序检查已经合并的最后(按照创建的时间先后顺序)mergeFactor个段的document的总和100是否大于等于
targetMergeDocs(这里是100,刚好满足要求)
于是程序又将硬盘上面的后10个段合并为一个新的段。
另外一个例子:
doc数目 段数目
1000---------------9个
100-----------------9个
10 ----------------9个
这时如果再象硬盘中新建一个新的包含了10个doc的段
doc数目 段数目
(1) 1000----------------9个
(2) 100-----------------9个
(3) 10 ----------------9个
(4) 10 ----------------1个
这时候(3)(4)首先合并成一个新的段(3-4)包含100个doc
然后(2)(3-4)和并成一个新段(2-3-4)包含1000个doc
然后(1)(2-3-4)合并成一个新的段 包含10000个doc
最后合并成一个段
private
final
void
maybeMergeSegments()
throws
IOException
{
long
targetMergeDocs
=
minMergeDocs;
while
(targetMergeDocs
<=
maxMergeDocs)
{
//
find segments smaller than current target size
int
minSegment
=
segmentInfos.size();
int
mergeDocs
=
0
;
while
(
--
minSegment
>=
0
)
{
SegmentInfo si
=
segmentInfos.info(minSegment);
if
(si.docCount
>=
targetMergeDocs)
break
;
mergeDocs
+=
si.docCount;
}
if
(mergeDocs
>=
targetMergeDocs)
//
found a merge to do
mergeSegments(minSegment
+
1
);
else
break
;
targetMergeDocs
*=
mergeFactor;
//
increase target size
System.out.println(
"
- -- - -targetMergeDocs:
"
+
targetMergeDocs);
try
{Thread.sleep(
5000
);}
catch
(Exception e)
{}
;
}
}
posted on 2008-05-15 19:27
晓宇
阅读(1416)
评论(0)
编辑
收藏
所属分类:
LUCENE
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Lucene的切词 analysis包
关于IndexWriter中的3个性能参数
Lucene索引文件的格式
org.apache.lucene.index.SegmentInfos
org.apache.lucene.index.SegmentInfo
org.apache.lucene.store.RAMInputStream
org.apache.lucene.store.RAMOutputStream
org.apache.lucene.store.RAMFile
org.apache.lucene.store.OutputStream
org.apache.lucene.store.FSDirectory
Powered by:
BlogJava
Copyright © 晓宇