【问题标题】:Solr Document relationsSolr 文档关系
【发布时间】: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

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

  1. 我可以使用 result groupinggroup.sort 在那个时间点仅返回最新版本的文件,但是分组效率不会很高可能是数百万个文件。
  2. 我可以使用多值字段将所有版本的文件索引为一个文档,但是通过匹配来自两个不同版本的值会返回错误的结果,而且我们无法对多值字段进行排序。

您能否建议一些更有效和更实用的方法? 谢谢

【问题讨论】:

  • 如何将版本历史记录保存在单独的核心/集合中,并将当前状态保存在主核心/集合中?
  • 如果搜索主要针对当前状态,但在我的情况下,搜索将针对以前的状态(时间点搜索),这将有所帮助。

标签: indexing solr lucene filesystems nosql


【解决方案1】:

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

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

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

【讨论】:

  • 即使我双倍索引/有两个集合,它也有助于加快最新的搜索,但我仍然需要对时间点搜索进行分组,我认为这将是执行次数最多的搜索。
  • 然后,您可能需要查看后置过滤器。但是你必须编写一个自定义的。
  • 在这里使用 BlockJoins 是否合适? blog.mikemccandless.com/2012/01/…
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2014-09-30
  • 2015-12-07
  • 2016-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多