如何通过API调用Infinispan或Hibernate Search来索引单个项目?

Kno*_*lor 1 java lucene hibernate-search infinispan

我有一个使用Hibernate Search(由Lucene索引支持)和Infinispan的应用程序.我没有 使用Hibernate Core来加载我的数据(我认为这应该没问题).

在启动时,应用程序会从各种来源将大量数据加载到Infinispan缓存中.我发现如果我们离开自动索引(即没有指定hibernate.search.indexing_strategy = manual),缓存插入(和相关的索引)会占用大量内存并且通常根本不会完成.为了解决这个问题,我禁用了自动索引,并在插入所有初始数据后在缓存上运行批量/质量索引器 - 这只需几秒钟就可以正常工作.

我的问题是我定期插入/更新/删除缓存中的项目,我找不到告诉Infinispan或Hibernate Search [重新]索引这些项目的方法.我可以从Hibernate Search Docs中找到最接近的Hibernate会话,并且只能在托管对象上运行.我不通过Hibernate加载数据,所以这是不可能的.

如何通过API调用Infinispan或Hibernate Search来索引单个项目?

我期待您提供任何帮助,如果您需要任何其他信息,请告诉我们.

谢谢,詹姆斯

San*_*nne 5

Infinispan不提供显式的index()方法.添加一个是个好主意,欢迎您打开JIRA作为功能请求.

你可以做的是保持在任何时候都启用自动索引,但是如果使用在每个put()操作,禁用索引上AdvancedCache的withFlags方法,使旗SKIP_INDEXING.

Cache nonIndexedCache = cache.getAdvancedCache().withFlags(Flag.SKIP_INDEX);
nonIndexedCache.put( ... );
Run Code Online (Sandbox Code Playgroud)

请注意,示例中的第一行相当慢,因此您希望保持对该缓存的引用以执行多个put操作.