【发布时间】:2016-11-26 20:24:27
【问题描述】:
我正在尝试使用 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
我想到了两种可能的方法:
- 我可以使用 result grouping 和 group.sort 在那个时间点仅返回最新版本的文件,但是分组效率不会很高可能是数百万个文件。
- 我可以使用多值字段将所有版本的文件索引为一个文档,但是通过匹配来自两个不同版本的值会返回错误的结果,而且我们无法对多值字段进行排序。
您能否建议一些更有效和更实用的方法? 谢谢
【问题讨论】:
-
如何将版本历史记录保存在单独的核心/集合中,并将当前状态保存在主核心/集合中?
-
如果搜索主要针对当前状态,但在我的情况下,搜索将针对以前的状态(时间点搜索),这将有所帮助。
标签: indexing solr lucene filesystems nosql