我正在尝试找到最佳的索引解决方案,以在群集的Web应用程序中实现搜索引擎,但我在官方文档中找不到对我的问题的明确答案。
我的Java / Java EE后端将部署在几个负载平衡的实例中。搜索引擎将需要索引数据的近实时可用性(即,在索引和可检索性之间的间隔少于5秒)。
Hibernate Search可以在具有JGroups的集群环境中工作,但该文档还指出,作为一种折衷,它需要非集群索引和非共享索引,这几乎是实时的。
使用标准IndexManager,您只有在将最新的更改写入磁盘并重新打开IndexSearcher时,才能看到最新的更改。
默认情况下,Hibernate Search会写入磁盘并为每个查询打开一个新的IndexSearcher,因此您可以确保搜索始终与数据库同步。
NRTIndexManager与标准版本有所不同,因为它允许您搜索索引的最新更改,而无需在磁盘上进行显式写入。通常在需要高吞吐量且无法立即将所有内容写入磁盘时使用。因此,它与您是否会立即看到所做更改的事实并没有真正的关联:当您允许丢失一些索引数据时,这是一种优化-最新的更改可能会丢失。
如http://docs.jboss.org/hibernate/search/5.5/reference/en-US/html_single/#jgroups-backend此处的文档所述,您可以使用同步JGroups进行Hibernate Search阻塞,直到所有索引都被阻塞为止。同步中。因此,它可以为您的情况服务。
请注意,我们目前正在Elasticsearch后端上使用5.6,这可能是您感兴趣的,因为它通常是为您的案例设计的。它仍处于测试阶段,但已经处于良好状态。您可能需要看一下它:http : //docs.jboss.org/hibernate/search/5.6/reference/en-US/html/ch11.html。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句