[lucene] 如何避免重复索引文件的方案

TonyLian 2010-01-18
客户端向服务器提交文件,并请求被索引。

因为不同客户端,或同一客户端不同次上传来的文件,可能是重名的,所以服务器端必须改名保存,比如 yyyyMMddHHmmssSSS。

但这样一来,对于已经被收录的文件,有可能因为用户的重复操作,而重复收录,在服务器上有多个文件,其内容是相同的。

这样,检索出来的结果重复,而且会浪费存储空间(索引的、原始文件的)

不知道Lucene中有没有解决方案。

我能想到的方法是,在建立索引时,用一个Field记录原始文件的MD5值,一个Field记录其在客户端的文件名。

下次文件上传接收用于比对,如果两者皆重复,则不再收录。

按说,这不应该属于Lucene的范畴,而是在其前面的。但是,需要从现有索引中查找。

不知道这个方案,是否可行?
luckaway 2010-01-18
如果MD5定义成唯一键也可以的!
每次都是更新操作,代码片段如下:
indexWriter.updateDocument(new Term(Constant.FIELD_KEY, md5), document);

当这个md5存在就会覆盖,如果找不到对应的,lucene就会新添加一条!


索引数据定义一个唯一键肯定是需要的

md5 or useId+md5?唯一键如果选择取决于具体需求
TonyLian 2010-01-18
大概明白了,但这样可以避免重复索引,可避免不了服务器上被上传了重复的原始文件,稍稍是个遗憾吧。

但想必性能比接收文件前先 search 一下要好一些?
luckaway 2010-01-18
TonyLian 写道
大概明白了,但这样可以避免重复索引,可避免不了服务器上被上传了重复的原始文件,稍稍是个遗憾吧。

但想必性能比接收文件前先 search 一下要好一些?


这个性能你放心吧,我就是这么设计的!

先search有一个问题就是未刷到磁盘的文档,是查不到的!
InnocentBoy 2010-01-19
我也遇到这样的问题,正在研究。
TonyLian 2010-01-19
InnocentBoy 写道
我也遇到这样的问题,正在研究。


LOGO和我很像吗
Global site tag (gtag.js) - Google Analytics