Solr文件关系

时间:2016-07-22 20:29:23

标签: indexing solr lucene filesystems nosql

我正在尝试索引一个"版本化的文件系统"使用Solr在哪里:

  • 每个文件都是由32字节guid(oGuid)和

  • 标识的对象
  • 每个版本的文件都可以通过另一个32字节的guid(vGuid)来识别。

例如,下面的文档是为文件" / tmp / x"

添加的
path: /tmp/x
oGuid: fdf2eec39a8a42ca8fddb17ad65017ba
vGuid: b2f1d0204a0743ff82b0056c82ed84e6 
mtime: 2016-07-14T21:35:21Z
size: 12580

然后,如果同一文件的另一个版本进来,我将添加文件:

path: /tmp/x
oGuid: fdf2eec39a8a42ca8fddb17ad65017ba 
vGuid: 83dc77c8ed90439bbf38ae42c07bea13 
mtime: 2016-07-15T20:30:11Z
size: 1780

此时,当用户在特定时间点搜索/浏览文件系统时,我必须返回文件的最新匹配版本

例如,如果用户在的最新时间点查找文件 / tmp / x。我需要返回它的最新版本 的 vGuid:83dc77c8ed90439bbf38ae42c07bea13

我想到了两种可能的方法:

  1. 我可以使用结果分组 group.sort 在该时间点仅返回最新版本的文件,但分组效率不高因为可能有数百万个文件。
  2. 我可以使用multiValued字段将所有文件版本索引为一个文档,但是通过匹配来自两个不同版本的值会返回错误的结果,而且我们无法对多值字段进行排序。
  3. 请您提出一些更有效和实用的方法吗? 感谢

1 个答案:

答案 0 :(得分:0)

如果用例是"最新版本"和"在特定日期" - 每次更改时,我可能会对文件的最新两个版本进行双重索引。带有标记字段(最新)的最新版本和第二次到现在的上一版本具有该标记。

使用自定义更新请求处理器(获取并更新相同ID的最新记录)也可以实现这一点,尽管这不是一个简单的实现。

或者,我只有两个集合,一个用于最新,一个用于指定特定日期。索引到第一个版本覆盖以前的版本而不是第二个版本。