我有一个使用Hibernate Search(由Lucene索引支持)和Infinispan的应用程序。我不使用Hibernate Core加载我的数据(我相信从3.2开始就可以了)。
在启动时,应用程序会从各种来源将大量数据加载到Infinispan缓存中。我发现,如果我们保留自动索引功能(即未指定hibernate.search.indexing_strategy = manual),则缓存插入(以及相关的索引编制)将占用大量内存,并且通常根本无法完成。为了解决这个问题,我禁用了自动索引,并且在插入所有初始数据之后,在缓存上运行了批量/质量索引器-这只需要几秒钟,就可以正常工作。
我的问题是我会定期从缓存中插入/更新/删除项目,而我无法找到一种方法来告诉Infinispan或Hibernate Search [重新]为这些项目建立索引。我可以从Hibernate搜索文档中找到最接近的一个,它涉及一个Hibernate会话,并且仅适用于托管对象。我没有通过Hibernate加载数据,因此这是不可能的。
如何通过对Infinispan或Hibernate Search的API调用为各个项目编制索引?
我期待您能提供的任何帮助,如果您需要任何其他信息,请告诉我。
谢谢,詹姆斯
Infinispan不提供显式的index()方法。添加一个是一个好主意,欢迎您打开JIRA作为功能请求。
您可以做的是始终保持启用自动索引编制,然后使用AdvancedCache上的withFlags方法禁用每个put()操作的索引编制并启用Flag SKIP_INDEXING。
Cache nonIndexedCache = cache.getAdvancedCache().withFlags(Flag.SKIP_INDEX);
nonIndexedCache.put( ... );
请注意,示例中的第一行相当慢,因此您要保留对该高速缓存的引用,以进行多次放置操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句