如何将Hibernate Lucene索引设置为指向共享位置(因此本地服务器中不生成索引)

如何将Hibernate Lucene索引设置为指向共享位置(因此本地服务器中不生成索引),hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,在我的应用程序中,我将实现hibernate lucene。我的应用程序将部署在集群环境中 现在,我无法找到如何,我可以指出所有lucene索引到共享位置的位置。因此可以通过网络访问 可以,但这并不像拥有共享目录那么简单:应用程序的两个实例不能同时访问相同的索引文件 因此,首选解决方案通常是: 只有一个“主”节点访问索引的“主”副本,并让所有其他节点向该“主”节点发送“写请求” 定期将索引的“主”副本复制到“从”节点,以便它们可以读取,即使它们的副本总是稍微过时 Hibernate Search

在我的应用程序中,我将实现hibernate lucene。我的应用程序将部署在集群环境中


现在,我无法找到如何,我可以指出所有lucene索引到共享位置的位置。因此可以通过网络访问

可以,但这并不像拥有共享目录那么简单:应用程序的两个实例不能同时访问相同的索引文件

因此,首选解决方案通常是:

  • 只有一个“主”节点访问索引的“主”副本,并让所有其他节点向该“主”节点发送“写请求”
  • 定期将索引的“主”副本复制到“从”节点,以便它们可以读取,即使它们的副本总是稍微过时
  • Hibernate Search为这两种机制提供了实现:

  • 主/从体系结构的实现得益于或。请注意,JMS后端的bug明显较少。还要注意,您必须自己配置JMS或JGroups,这可能也需要一些专业知识
  • 由于使用了
  • 所以,这有点复杂

    另一个可能更容易的选择是使用,将索引移动到远程集群。它使用起来更简单,但由于仍处于实验阶段,它有一些粗糙的边缘


    我们计划在Hibernate Search的下一个版本(版本6)中为Elasticsearch集成提供一流的支持。

    您可以,但这并不像拥有一个共享目录那么简单:应用程序的两个实例不能同时访问相同的索引文件

    因此,首选解决方案通常是:

  • 只有一个“主”节点访问索引的“主”副本,并让所有其他节点向该“主”节点发送“写请求”
  • 定期将索引的“主”副本复制到“从”节点,以便它们可以读取,即使它们的副本总是稍微过时
  • Hibernate Search为这两种机制提供了实现:

  • 主/从体系结构的实现得益于或。请注意,JMS后端的bug明显较少。还要注意,您必须自己配置JMS或JGroups,这可能也需要一些专业知识
  • 由于使用了
  • 所以,这有点复杂

    另一个可能更容易的选择是使用,将索引移动到远程集群。它使用起来更简单,但由于仍处于实验阶段,它有一些粗糙的边缘


    我们计划在下一版本的Hibernate Search(第6版)中为Elasticsearch集成提供一流的支持。

    感谢您的回复。但有一个问题。正如您所说的,两个实例不能同时访问同一个索引,所以我认为这意味着实例将在访问索引时放置锁,当它释放锁时,第二个实例可以使用它。现在,您认为这种方法在性能上会有很大的影响还是有一点滞后。我建议您使用我提供的链接阅读文档。只有一个实例写入每个索引,并且它在该索引上具有独占锁。写入时会有延迟,因为从属节点需要通过网络发送“索引请求”,而来自从属节点的搜索查询将稍微过时,因为索引会定期从主节点同步到从属节点。感谢您的回复。但有一个问题。正如您所说的,两个实例不能同时访问同一个索引,所以我认为这意味着实例将在访问索引时放置锁,当它释放锁时,第二个实例可以使用它。现在,您认为这种方法在性能上会有很大的影响还是有一点滞后。我建议您使用我提供的链接阅读文档。只有一个实例写入每个索引,并且它在该索引上具有独占锁。写入时会有延迟,因为从属节点需要通过网络发送“索引请求”,而来自从属节点的搜索查询会稍微过时,因为索引会定期从主节点同步到从属节点。