[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和我很像吗 |