我试图找到在我的群集网络应用中实现搜索引擎的最佳索引解决方案,而且我在官方文档中找不到我的问题的明确答案。
我的Java / Java EE后端将部署在多个负载均衡的实例中。搜索引擎需要索引数据的近实时可用性(即索引和可检索性之间不到5秒)。
Hibernate Search可以在JGroups的集群环境中工作,但文档也说明了as a tradeoff it requires a non-clustered and non-shared index近乎实时的情况。
答案 0 :(得分:0)
使用标准的IndexManager,只有在将它们写入磁盘并重新打开IndexSearcher时才会看到最新的更改。
默认情况下,Hibernate Search会写入磁盘并为每个查询打开一个新的IndexSearcher,因此您可以确保您的搜索始终与您的数据库保持同步。
NRTIndexManager与标准管理器不同,因为它允许您搜索索引的最新更改,而无需在磁盘上进行显式写入。它通常在您需要高吞吐量时使用,并且您无法立即在磁盘上写入所有内容。因此,它与您将立即看到您的更改的事实并不真正相关:当您可以允许某些索引数据丢失时,这是一种优化 - 最新的更改可能会丢失。
正如此处http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#jgroups-backend文档中所述,您可以使用Hibernate Search阻止同步JGroup,直到所有索引同步。所以它可以适用于你的情况。
请注意,我们目前正在使用Elasticsearch后端的5.6,这可能是您感兴趣的,因为它通常是针对您的情况设计的。它仍处于测试阶段,但已经处于良好的状态。您可能需要查看它:http://docs.jboss.org/hibernate/search/5.6/reference/en-US/html/ch11.html。