java - 如何通过对 Infinispan 或 Hibernate Search 的 API 调用为单个项目编制索引?

标签 java lucene hibernate-search infinispan

我有一个使用 Hibernate Search(由 Lucene 索引支持)和 Infinispan 的应用程序。我使用 Hibernate Core 加载我的数据(我相信这应该没问题,因为 3.2)。

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

我的问题是我定期从缓存中插入/更新/删除项目,但我无法找到一种方法让 Infinispan 或 Hibernate Search 为这些项目[重新]编制索引。我能从 Hibernate Search Docs 找到最接近的涉及 Hibernate session ,并且仅适用于托管对象。我不通过 Hibernate 加载数据,所以这是不可能的。

如何通过对 Infinispan 或 Hibernate Search 的 API 调用为单个项目编制索引?

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

谢谢, 詹姆斯

最佳答案

Infinispan 没有提供明确的 index() 方法。添加一个是个好主意,欢迎您打开 JIRA 作为功能请求。

您可以做的是始终保持自动索引启用,但随后使用 the withFlags method on AdvancedCache 禁用每个 put() 操作的索引。并启用标志 SKIP_INDEXING .

Cache nonIndexedCache = cache.getAdvancedCache().withFlags(Flag.SKIP_INDEX);
nonIndexedCache.put( ... );

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

关于java - 如何通过对 Infinispan 或 Hibernate Search 的 API 调用为单个项目编制索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670594/

相关文章:

java - 如何从 Lucene TokenStream 中获取 Token?

java - 倾城测试NG : Custom test method names while using @DataProvider

java - 如何解决不需要的 TestNG assertEquals 重载

java - java spring boot/spring security(HttpSecurity)中的 session 到期时如何自动注销

java - 在 Lucene IndexSearcher 中查询所有结果

c# - 如何在 Sitecore 中配置 Lucene 以仅索引主数据库上项目的最新版本?

java - 如何从日历中获取昨天的实例?

java - Hibernate Search 对一个查询非常慢,对另一个查询很快

elasticsearch - 在不同索引上组合休眠搜索查询的最佳方法

spring-boot - Spring Boot +休眠搜索:必需的索引状态被忽略?