[lucene] 增量索引的仅仅设置false吗?
kexzcle
2010-02-04
IndexWriter writer = new IndexWriter(indexDir,new Analyzer(),true)
仅是简单的将create参数设为false,搜索结果是重复的?请问是什么原因? 还是增量索引不仅仅这么简单设置! 需要自己写方法。。? |
|
kexzcle
2010-02-04
用一个文本记录当前已做索引的最后一个ID,
下次做索引,从此文件获取ID, 从它的下一个ID进行做索引追加到原来的索引文件中. 这样做增量是合理的是么? 代码应该怎么具体实现呢? |
|
illu
2010-02-04
如果增量索引和查询属于同一JVM
IndexReader需要reopen 感觉你那样实现不是很合理 确实新增的可以追加至索引 那么修改的 删除的数据呢 也应该与索引同步吧? |
|
kexzcle
2010-02-04
IndexReader需要reopen 是什么意思?是可以解决搜索重复记录么? 现在索引已经有原来和新索引 2次的记录啦 |
|
illu
2010-02-05
现在索引已经有原来和新索引 2次的记录啦
你是直接add的吗 没有把原来的document删除么? 要不怎么是2次么? reopen是IndexReader的方法 会加载改变的索引 |
|
kexzcle
2010-02-05
illu 写道 现在索引已经有原来和新索引 2次的记录啦
你是直接add的吗 没有把原来的document删除么? 要不怎么是2次么? reopen是IndexReader的方法 会加载改变的索引 是的,我是直接Add的,应该删除原有的是么? 也是,一直增加的话索引库很多无用的数据还存留了。 那reopen是什么时候调用的。 我的代码中没用到IndexReader啊 请教! |
|
illu
2010-02-05
=.=
是这样的 IndexWriter负责对索引的增删操作 IndexSearcher负责对索引的查询操作 而创建IndexSearcher的时候需要用到IndexReader Directory d = new SimpleFSDirectory(new File("d:/xxx")); IndexReader reader = IndexReader.open(d); IndexSearcher searcher = new IndexSearcher(reader); 当IndexWriter对索引有所改变时 IndexReader应该reopen来载入修改的索引 还有就是你新增了 肯定要把以前的干掉么 |
|
imjl
2010-02-05
索引一旦变化,只是提交变化信息,那么commit就可以
|
|
luckaway
2010-02-05
增量就是这样做的
至于数据重复,可能是你重复索引数据的原因! 你应该每索引一个document就用日志记录下它的ID。 |
|
illu
2010-02-05
imjl 写道 索引一旦变化,只是提交变化信息,那么commit就可以
我测试过 如果只是writer commit 而 reader不reopen 从而得到searcher的话 commit的数据也是查询不到的 |