异步构建Hibernate Search索引以确保没有停机时间。

时间:2018-08-01 20:20:59

标签: java hibernate lucene microservices hibernate-search

我们正在使用Hibernate Search(Lucene Engine)对文本进行模糊搜索,这些文本是我们存储在SQL Server数据库中并由Java 8编写的搜索服务所使用的一些数据。搜索的数据源是一个具有中等编辑能力的表/更新频率。我们需要的是,对于重建索引时进行的任何更改,我们要确保搜索功能仍在运行且可访问,而不是被正在构建的索引过程锁定。

简而言之,如何在构建新索引时临时使用现有索引,并在完成后替换它。

1 个答案:

答案 0 :(得分:1)

不是您问题的答案,但是无论如何,它可以为您提供帮助:根据我在评论中的理解,您实际上并不需要完全重建索​​引,您只需要从与应用程序执行搜索查询。

如果“正在更新”的应用程序使用Hibernate ORM,则可以解决该问题而无需完全重建索​​引:在“正在更新”的应用程序中自动且增量地构建索引(使用"automatic indexing" mode中的Hibernate Search无需进行任何操作查询),并确保该索引可用于“搜索”应用程序。

后者可以实现:

  • 使用实验性的Elasticsearch integration并将两个应用程序都连接到同一集群:一个将更新它,另一个将使用它进行搜索。
  • 或通过将Lucene与filesystem-master / filesystem-slave directory providers集成使用,这将使您能够定期(且无需停机)从“更新”应用程序(主)到“搜索”应用程序(从属)。请注意,如果有多个应用程序更新索引,则需要使用JMS or JGroups backend将所有索引更新重定向到主节点,并避免冲突。注意,配置JMS或JGroups并不是很明显。