索引源数据来自多个源的Solr记录的好方法是什么?

时间:2011-08-29 19:45:14

标签: solr

我有多个数据源,我想从中生成Solr文档。一个来源是文件系统,所以我计划迭代一组(可能很多)文件来收集每个生成的Solr文档中的一部分数据。第二个来源是另一个Solr索引,我想从中拉出几个字段。第二个来源也可能有很多(〜百万)记录。如果重要,源1提供了大部分内容(每个记录的大小比源2的大几个数量级)。

来源1:

  • / file / band1 - > id =“xyz1”name =“beatles”era =“60s”
  • / file / band2 - > id =“xyz2”name =“u2”era =“80s”
  • ...
  • / file / band4000 - > id =“xyz4000”name =“clash”era =“70s”

来源2:

  • solr record 1 - > id =“xyz2”guitar =“edge”
  • solr record 2 - > id =“xyz4000”guitar =“jones”
  • solr record 3 - > id =“xyz1”guitar =“george”

我的问题是如何最好地设计此工作流程。一些高级选择包括:

  1. 完全索引来自源1(文件系统)的数据。接下来,索引来自源2的数据并更新已经索引的记录。使用Solr,我相信你仍然不能只为记录添加一个字段,用新的替换整个旧记录。
  2. 执行与(1)相反的操作,首先索引Solr源中的数据,然后索引文件系统中的数据。
  3. 以某种方式在索引之前将数据集成到Solr中。一般来说,我们对每个源中遍历的顺序知之甚少 - 也就是说,我没有看到一种简单的方法来迭代两个源,其中xyz1从两个源处理,然后是xyz2等等。
  4. 因此影响决策的一些因素包括数据的大小(在计算时间或内存方面不能太低效)以及Solr在替换记录时的性能(原始大小是否重要? )。

    非常感谢任何想法。

2 个答案:

答案 0 :(得分:1)

我想说如果您不关心存储在两个源中的数据首先被合并,那么选项1或2将正常工作。我可能首先索引较大的源,然后用第二个索引“更新”。

答案 1 :(得分:1)

使用选项3 - 在更新前合并记录。

据推测,您将使用脚本迭代文件并在将它们发送到最终的Solr索引之前对其进行处理。在该脚本中,使用共享标识符查询备用Solr索引以获取它可能具有的任何补充字段信息。将其与您文件的内容合用,然后将结果记录发送给Solr进行索引。

通过在更新之前进行组合,您不必担心记录会相互覆盖。您还可以更好地控制哪个源具有优先级。此外,只要您不查询该国另一边的服务器,我就会假设备用Solr索引的请求时间可以忽略不计。