对源数据来自多个来源的 Solr 记录进行索引的好方法是啥?

Posted

技术标签:

【中文标题】对源数据来自多个来源的 Solr 记录进行索引的好方法是啥?【英文标题】:What is a good way to index a Solr record in which the source data comes from multiple sources?对源数据来自多个来源的 Solr 记录进行索引的好方法是什么? 【发布时间】:2011-08-29 19:45:14 【问题描述】:

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

来源一:

/file/band1 -> id="xyz1" name="beatles" era="60s" /file/band2 -> id="xyz2" name="u2" era="80s" ... /file/band4000 -> id="xyz4000" name="***" era="70s"

来源 2:

solr 记录 1 -> id="xyz2" guitar="edge" solr 记录 2 -> id="xyz4000" guitar="jones" solr 记录 3 -> id="xyz1" guitar="george"

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

    完全索引来自源 1(文件系统)的数据。接下来,索引源 2 中的数据并更新已索引的记录。使用 Solr,我相信您仍然不能只向记录添加单个字段,而是将整个旧记录替换为新记录。 执行 (1) 的相反操作,首先索引来自 Solr 源的数据,然后是来自文件系统的数据。 在索引到 Solr 之前以某种方式集成数据。一般来说,我们对每个源中的遍历顺序知之甚少——也就是说,我没有看到一种简单的方法将两个源一起迭代,其中 xyz1 从两个源中处理,然后是 xyz2等。

所以影响决策的一些因素包括数据的大小(在计算时间或内存方面不能太低效)和 Solr 在替换记录时的性能(原始大小是否很重要? )。

任何想法将不胜感激。

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢...不过,我想我倾向于先索引较小的源。索引的初始成本会更少,而且 Solr 无论如何都会替换整个记录(因为您不能只更新单个字段)。我不确定这是否有很大的不同,但我假设删除一个大的 Solr 文档比删除一个小的文档需要更多的时间。 所以更小是指源文件中的文档本身更小,而不是文档的数量。我是说先检查较大的集合,以便它的索引已经创建,然后如果您打算在索引第二个集合时提供请求,则在较小的集合上执行更新一个,您可能会看到更好的性能,但它可能会根据配置可以忽略不计。 是的,我最初在这一点上不够清楚——我指的是每条记录的大小差异。【参考方案2】:

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

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

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

【讨论】:

以上是关于对源数据来自多个来源的 Solr 记录进行索引的好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Solr

solr索引基本原理

solr索引基本原理

Solr索引库查询界面详解

Solr-6:SolrRestAPI

Solr 将整个索引加载到内存中