Apache spark 是否有可能在亚秒的时间内切换到Solr新索引?

Apache spark 是否有可能在亚秒的时间内切换到Solr新索引?,apache-spark,indexing,solr,batch-processing,Apache Spark,Indexing,Solr,Batch Processing,我想了一段时间了。假设我有一个solr实现,它有一个非常大的索引,由于每天导入新数据,所以必须每晚重建索引。可以将新数据索引到“离线”索引中,然后在完全索引后切换到新索引的作业吗?这基本上意味着我的搜索索引只会被搜索,而不会实时更新——只有在新索引被切换时 提前感谢您的回复。 --MG在这种情况下,您需要创建两个核心 SearchCore-用于搜索 索引核心-用于索引 在索引核心中成功完成索引时。您需要将索引核心与搜索核心进行交换 http://localhost:8983/solr/adm

我想了一段时间了。假设我有一个solr实现,它有一个非常大的索引,由于每天导入新数据,所以必须每晚重建索引。可以将新数据索引到“离线”索引中,然后在完全索引后切换到新索引的作业吗?这基本上意味着我的搜索索引只会被搜索,而不会实时更新——只有在新索引被切换时

提前感谢您的回复。
--MG

在这种情况下,您需要创建两个核心

  • SearchCore-用于搜索
  • 索引核心-用于索引
索引核心中成功完成索引时。您需要索引核心与搜索核心进行交换

http://localhost:8983/solr/admin/cores?action=SWAP&core=IndexingCore&other=SearchCore
在此之后,SearchCore将指向IndexingCore数据目录,反之亦然。然后您可以卸载索引核心,这样它就不会消耗内存

http://localhost:8983/solr/admin/cores?action=UNLOAD&core=IndexingCore

在这种情况下,您需要创建两个核心

  • SearchCore-用于搜索
  • 索引核心-用于索引
索引核心中成功完成索引时。您需要索引核心与搜索核心进行交换

http://localhost:8983/solr/admin/cores?action=SWAP&core=IndexingCore&other=SearchCore
在此之后,SearchCore将指向IndexingCore数据目录,反之亦然。然后您可以卸载索引核心,这样它就不会消耗内存

http://localhost:8983/solr/admin/cores?action=UNLOAD&core=IndexingCore
我将通过以下方式解决此问题(假设您使用的是Solrcloud):

  • 假设您的收藏名为“当前”
  • 创建指向“当前”的别名a_current
  • 您的客户机代码本身并不调用“current”集合,而是调用“a_current”
  • 无论何时需要,您都可以使用新数据创建一个新集合,例如current_2
  • 在一次操作中,在不停机的情况下,使用与以前相同的CREATEALIAS命令,将一个_current指向当前的_2
  • 我将通过以下方式解决此问题(假设您使用的是Solrcloud):

  • 假设您的收藏名为“当前”
  • 创建指向“当前”的别名a_current
  • 您的客户机代码本身并不调用“current”集合,而是调用“a_current”
  • 无论何时需要,您都可以使用新数据创建一个新集合,例如current_2
  • 在一次操作中,在不停机的情况下,使用与以前相同的CREATEALIAS命令,将一个_current指向当前的_2

  • 如果您不是在讨论同一集群或solr服务器上的核心或集合,请不要使用solr来分发请求(这将要求您保持一个专用solr服务器在线,只将其用作切分端点,而不做任何有用的事情)


    使用常规HTTP负载平衡器并将其指向活动的Solr服务器。在将负载切换到Solr服务器之前,请确保在Solr服务器上使用适当的带新索引的warming查询(以避免在服务器联机时执行缓慢的查询)。负载平衡器还可以向这两个节点发送查询(但只返回主服务器的响应),让您在动态预热新服务器的同时,仍然为来自旧服务器的请求提供服务。

    如果您不是在同一集群或solr服务器上谈论核心或集合,请不要使用solr来分发请求(这将要求您保持一个专用的Solr服务器在线,只将其用作切分端点,而不做任何有用的事情)


    使用常规HTTP负载平衡器,并将其指向活动的Solr服务器。在将负载切换到Solr服务器之前,请确保在Solr服务器上使用带有新索引的适当暖化查询(以避免服务器联机时查询速度慢)。负载平衡器还可以向两个节点发送查询(但只返回主服务器的响应),以便在仍为旧服务器的请求提供服务的同时动态预热新服务器。

    让我们看看两种主要的可能情况:

    单个Solr实例

  • 创建两个核心:A、B
  • 在线的
  • 重新索引B(脱机)
  • 准备好后交换[1]
  • /solr/admin/cores?操作=交换和核心=A和其他=B

    注意:您的搜索客户端将始终指向

    SolrCloud架构

  • 您创建了两个集合:A、B
  • 将别名分配给[2]:
  • /管理员/集合?操作=CREATEALIAS&name=在线搜索&collections=A 注意:您的搜索客户端将访问“在线搜索”端点

  • 您正在索引集合B
  • 准备好后,将别名分配给B[2]
  • /管理员/集合?操作=CREATEALIAS&name=在线搜索&collections=B 5.现在集合A处于脱机状态

    [1]


    [2] 让我们看看两种主要的可能情况:

    单个Solr实例

  • 创建两个核心:A、B
  • 在线的
  • 重新索引B(脱机)
  • 准备好后交换[1]
  • /solr/admin/cores?操作=交换和核心=A和其他=B

    注意:您的搜索客户端将始终指向

    SolrCloud架构

  • 您创建了两个集合:A、B
  • 将别名分配给[2]:
  • /管理员/集合?操作=CREATEALIAS&name=在线搜索&collections=A 注意:您的搜索客户端将访问“在线搜索”端点

  • 您正在索引集合B
  • 准备好后,将别名分配给B[2]
  • /管理员/集合?操作=CREATEALIAS&name=在线搜索&collections=B 5.现在集合A处于脱机状态

    [1]


    [2]

    有趣。什么版本的SOLR支持这些操作?谢谢你的回答。理论上,我可以使用这种策略交换一堆不同的内核,对吗?而且这些内核不必在同一个solar实例上,对吧?它们只需要有相同的模式?@Griff你使用的是哪个版本的SOLR?Bu有一点是肯定的,这些特性在Solr 4中可用,