lucene article
关于lucene断点续索引和增量索引的问题
1、像百度、google等桌面搜索建立索引的时候可以停止后重新索引,他能保证以前索引过的文件重新索引的时候不用再索引吗?如果停止后要索引的文件进行了删除和添加等操作,那么他是怎么处理的以保证索引文件的覆盖率。用lucene索引文件的时候如何实现这种功能,给个思路。
2、如何在我给一个目录里添加一个文件的时候自动把这个文件用lucene索引起来,就是所谓的增量索引,难道用个timer扫描目录变化或者用filewatch来监视这个目录,然后对其索引吗?可是这样的话必须做个windows服务了,要不这个软件关闭的话就不能相应目录里文件的变化了。
3、如果一个文件修改或者删除了,如何同步到索引里,用IndexReader找这个Document的时候考什么去找,必须要在Document里放一个类似于主键的域来找到它,并删除或者重新建立索引吗?
就这3问题,大家给说说思路,谢谢。
-----------------
判断索引目录的segments文件是否存在,
如果存在,用增量索引
否则, 重新创建索引
如果是重新创建索引
只需要遍历需要索引的内容,然后新增文档
如果是增量索引
判断主Key[文件名(包含全路径)]在索引中是否存在
如果存在
判断[文件的修改时间],是否和索引中保存的[修改时间]一致
如果不一致
删除旧的索引中的该索引项目
新增对该文档的索引
否则
新增该文档的索引
缺点,不能发现已经删除的文件,当然是认为的去某个目录删除该文件。
如果是程序的话当然是可以的,只需要把索引中的项目删除。
CodeProject上面的http://www.codeproject.com/csharp/DesktopSearch1.asp
使用微软的IndexService,需要win2000或者win2000以上的版本。
缺点,好像这些函数在处理 修改word一点点内容之后,算法会有一些问题,如果重新编制索引,又不会出现:( 不知道是不是我做错了。
-------------------
用lucene为数据库搜索建立增量索引
http://www.cnblogs.com/maxwolf/archive/2005/10/25/262034.html
------------------
lucene中增量索引的方法!
http://javaeyes.javaeye.com/blog/30959
-------------------
海量数据的管理及增量索引(全文检索系统)
对于分布式的全文检索系统,海量数据的管理与增量索引策略显得尤为重要,因为很多用户时时地对数据进行检索,而后台又有多个子系统在时时地往总库写数据,而各客户端需要对添加到库里的数据实时地查询到。而对于全文检索系统用户查询到的提前必须对入到库里的数据进行索引,这样用户才能看到数据。而且每天的数据量多的时候可能有好几十万条,每一条数据基本上都是在70K以上,因为好几个字段都是全文字段。这让我在设计方案时颇费心计呀。最终我的方案出来了,程序也基本上写好了,不过效率如何还得测试测试。我的方案大致如下:(用的是CNKI的全文检索数据库系统KBase)
1、使用联合表的思想将多个物理上独立的表在逻辑上统一起来
2、联合表由年表、月表、日表组成。
3、每日晚上12点将上一天的日表合并到月表中去,并做索引
4、每月月初将上一月的月数据合并到当年年表中去,并索引
5、第3 步是一个可选项,也可以是在月未对所有当月的月数据进行合并,并做一次索引
6、第4步也可以是到年底对一年的月数据进行一次合并,并做一次索引
对于KBase系统来说这是一个比较好的方案,但若KBase能支持嵌套的联合表和可更新的视图就好了,这样对于月表不需要合并,只需要再建一个联合表或者视图即可,目前的视图由于只能查询,而不能将修改更新回去。而且对于这种系统月表的数据粒度也是比较适中的一个数据级。这样可提高系统的效率,另外加上并行表的支持,这样可以将数据分散到不同的机器上,而由一个视图或者联合表统一管理。这是一种最优的方法,但需要KBase进行一定的改进。
--------------------
主题: 关于lucene文件锁和增量索引BUG的讨论。
http://www.javaeye.com/post/225074
-------------------
通过dotLucene实现增量索引.
http://xiaohui.cnblogs.com/archive/2004/10/23/55715.aspx
---------------------
全文检索系统中海量数据的增量索引
全文检索系统中如果每天处理至少10多万条的文本数据,那么如何对这些新增加的数据进行增量索引并进行有效地管理是整个系统的关键。通过采用联合表或者并行表的方式来管理这些数据,但是每一个并行表的粒度应该设多大,设多少个子表或者并并行表都需要系统的应用规模来定。如果并行表的粒度过大,即使是在索引过程中采用的是拉链索引的方式来组织索引数据,也是需要大量的索引数据的遍历,若不是拉链更需要索引数据的大量移动来进行索引合并,进而严重影响系统性能。但是如果数据粒度过小,这样子表会很多,这样在检索时会影响到检索的性能,因为需要查询很多个子表才能返回结果。而如果对子表定期地合并,这样在合并的次数也会大大增加,合并完后还需要作一次整体索引。所以设计子表粒度和子表的个数时需要慎重考虑,根据自己系统的实际情况而定。
--------------------
关于lucene中增量索引的问题
Draem 2006-09-05 23:16
为什么我将IndexWriter的第三个参数改为false后,还是会重新索引而不是做增量索引呢?IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), false);也许已经是做的增量索引,但我好象没发觉有什么差别,比如说速度变快。增量索引是不是指之前已经建立了索引的文件就不再建立索引呢?
旋风小子 1970-01-01 08:00
对于增量索引,Nutch从架构设计得以解决的比如:利用目录的不同,保存不同的数据segments/20****目录这样在检索时就可以持续增量.
--------------------
lucene是支持增量索引的,但是我在index上用indexWriter的addDocument(Document)之后,用IndexReader,不能搜索到新增的Document的内容的?
先关闭indexwrite,关闭之后才能讲Document写入到索引文件中
----------------------
1、像百度、google等桌面搜索建立索引的时候可以停止后重新索引,他能保证以前索引过的文件重新索引的时候不用再索引吗?如果停止后要索引的文件进行了删除和添加等操作,那么他是怎么处理的以保证索引文件的覆盖率。用lucene索引文件的时候如何实现这种功能,给个思路。
2、如何在我给一个目录里添加一个文件的时候自动把这个文件用lucene索引起来,就是所谓的增量索引,难道用个timer扫描目录变化或者用filewatch来监视这个目录,然后对其索引吗?可是这样的话必须做个windows服务了,要不这个软件关闭的话就不能相应目录里文件的变化了。
3、如果一个文件修改或者删除了,如何同步到索引里,用IndexReader找这个Document的时候考什么去找,必须要在Document里放一个类似于主键的域来找到它,并删除或者重新建立索引吗?
就这3问题,大家给说说思路,谢谢。
-----------------
判断索引目录的segments文件是否存在,
如果存在,用增量索引
否则, 重新创建索引
如果是重新创建索引
只需要遍历需要索引的内容,然后新增文档
如果是增量索引
判断主Key[文件名(包含全路径)]在索引中是否存在
如果存在
判断[文件的修改时间],是否和索引中保存的[修改时间]一致
如果不一致
删除旧的索引中的该索引项目
新增对该文档的索引
否则
新增该文档的索引
缺点,不能发现已经删除的文件,当然是认为的去某个目录删除该文件。
如果是程序的话当然是可以的,只需要把索引中的项目删除。
CodeProject上面的http://www.codeproject.com/csharp/DesktopSearch1.asp
使用微软的IndexService,需要win2000或者win2000以上的版本。
缺点,好像这些函数在处理 修改word一点点内容之后,算法会有一些问题,如果重新编制索引,又不会出现:( 不知道是不是我做错了。
-------------------
用lucene为数据库搜索建立增量索引
http://www.cnblogs.com/maxwolf/archive/2005/10/25/262034.html
------------------
lucene中增量索引的方法!
http://javaeyes.javaeye.com/blog/30959
-------------------
海量数据的管理及增量索引(全文检索系统)
对于分布式的全文检索系统,海量数据的管理与增量索引策略显得尤为重要,因为很多用户时时地对数据进行检索,而后台又有多个子系统在时时地往总库写数据,而各客户端需要对添加到库里的数据实时地查询到。而对于全文检索系统用户查询到的提前必须对入到库里的数据进行索引,这样用户才能看到数据。而且每天的数据量多的时候可能有好几十万条,每一条数据基本上都是在70K以上,因为好几个字段都是全文字段。这让我在设计方案时颇费心计呀。最终我的方案出来了,程序也基本上写好了,不过效率如何还得测试测试。我的方案大致如下:(用的是CNKI的全文检索数据库系统KBase)
1、使用联合表的思想将多个物理上独立的表在逻辑上统一起来
2、联合表由年表、月表、日表组成。
3、每日晚上12点将上一天的日表合并到月表中去,并做索引
4、每月月初将上一月的月数据合并到当年年表中去,并索引
5、第3 步是一个可选项,也可以是在月未对所有当月的月数据进行合并,并做一次索引
6、第4步也可以是到年底对一年的月数据进行一次合并,并做一次索引
对于KBase系统来说这是一个比较好的方案,但若KBase能支持嵌套的联合表和可更新的视图就好了,这样对于月表不需要合并,只需要再建一个联合表或者视图即可,目前的视图由于只能查询,而不能将修改更新回去。而且对于这种系统月表的数据粒度也是比较适中的一个数据级。这样可提高系统的效率,另外加上并行表的支持,这样可以将数据分散到不同的机器上,而由一个视图或者联合表统一管理。这是一种最优的方法,但需要KBase进行一定的改进。
--------------------
主题: 关于lucene文件锁和增量索引BUG的讨论。
http://www.javaeye.com/post/225074
-------------------
通过dotLucene实现增量索引.
http://xiaohui.cnblogs.com/archive/2004/10/23/55715.aspx
---------------------
全文检索系统中海量数据的增量索引
全文检索系统中如果每天处理至少10多万条的文本数据,那么如何对这些新增加的数据进行增量索引并进行有效地管理是整个系统的关键。通过采用联合表或者并行表的方式来管理这些数据,但是每一个并行表的粒度应该设多大,设多少个子表或者并并行表都需要系统的应用规模来定。如果并行表的粒度过大,即使是在索引过程中采用的是拉链索引的方式来组织索引数据,也是需要大量的索引数据的遍历,若不是拉链更需要索引数据的大量移动来进行索引合并,进而严重影响系统性能。但是如果数据粒度过小,这样子表会很多,这样在检索时会影响到检索的性能,因为需要查询很多个子表才能返回结果。而如果对子表定期地合并,这样在合并的次数也会大大增加,合并完后还需要作一次整体索引。所以设计子表粒度和子表的个数时需要慎重考虑,根据自己系统的实际情况而定。
--------------------
关于lucene中增量索引的问题
Draem 2006-09-05 23:16
为什么我将IndexWriter的第三个参数改为false后,还是会重新索引而不是做增量索引呢?IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), false);也许已经是做的增量索引,但我好象没发觉有什么差别,比如说速度变快。增量索引是不是指之前已经建立了索引的文件就不再建立索引呢?
旋风小子 1970-01-01 08:00
对于增量索引,Nutch从架构设计得以解决的比如:利用目录的不同,保存不同的数据segments/20****目录这样在检索时就可以持续增量.
--------------------
lucene是支持增量索引的,但是我在index上用indexWriter的addDocument(Document)之后,用IndexReader,不能搜索到新增的Document的内容的?
先关闭indexwrite,关闭之后才能讲Document写入到索引文件中
----------------------