【问题标题】:How to design multiple concurent imports using DIH in SOLR?如何在 SOLR 中使用 DIH 设计多个并发导入?
【发布时间】:2020-03-14 10:00:58
【问题描述】:

有时外部应用程序应向 SOLR 发送未知数量的不同索引请求。实际上,这些请求应该由 SOLR Data Import Handlers 根据请求内部提交的配置进行处理。

存在 SOLR 约束 - 特定 DIH 只能处理一个索引请求。 因为请求的数量可能非常大并且它们并行到达,所以在 solrconfig.xml 中定义多个 DIH 规范是不切实际的。

如何解决这个问题?

可能 SOLR 提供了一些管理 API 来从客户端动态创建 DIH 规范?

【问题讨论】:

    标签: solr solrcloud solrconfig


    【解决方案1】:

    最好的方法是在 Solr 之外创建一个层来处理您的导入任务。使用 DIH 将限制您可以做的事情(正如您所发现的那样),并且很难在多个节点和索引服务之间并行正常工作(它是为更简单的场景而设计的)。

    使用一个简单的队列(Redis、Celery、ApacheMQ,任何适合您选择的语言和技术),外部应用程序可以将请求放入其中并且您的索引工作者从中获取任务,这将是可扩展和可定制的。随着任务数量的增长,它可以让您构建到多个索引节点上,并且可以根据需要从多个源中提取数据(并在需要时应用缓存)。

    【讨论】:

    • 感谢您提供了一个很好的解决方案,我只看到了一个缺点 --- 我应该重新实现 DIH config 的一个很好的功能 --- 一个基于 XML 的 sql 数据映射到数据实体的声明性定义-配置。我想知道是否有任何方法可以重用该功能?
    • 您可以编写一个基于 XML 的小型解析器来读取 <field> 条目。只要您不使用(许多)变压器,它就应该非常简单。否则,我会花时间将其重写为适合您的应用程序的内容(并且可能在导入定义中重复使用)。您可以在发出请求时通过 URL 包含 DIH 配置选项(例如连接详细信息)等,但它仍然是单线程的。
    • >> 你可以通过
      >> 请求时的 URL 包含 DIH 配置选项(例如连接详细信息)等。
      这是我应该做的。
      您关于制作自己的 XML 解析器的建议支持我最初的想法,尽管我希望有一个更简单的解决方案。
    • 请参阅lucene.apache.org/solr/guide/6_6/…,了解如何做到这一点。您仍然需要处理 DIH 的其他限制,但这可能就足够了。
    • 对于在运行时使用实验性 SOLR 配置 API 来添加-删除请求处理程序是否有任何反对意见?该 API 允许为新创建的请求处理程序指定所有需要的参数或删除以前创建的处理程序。所以,我可能期望外部程序可以发送一个请求来创建一个具有唯一名称的新请求处理程序,在该处理程序上开始数据导入,然后删除该请求处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多