【问题标题】:How can I index individual items via an API call to Infinispan or Hibernate Search?如何通过对 Infinispan 或 Hibernate Search 的 API 调用来索引单个项目?
【发布时间】:2014-12-27 12:47:17
【问题描述】:

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

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

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

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

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

谢谢, 詹姆斯

【问题讨论】:

    标签: java lucene hibernate-search infinispan


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太完美了,我爱你。
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2020-05-31
    • 2014-11-09
    • 2017-11-09
    • 2018-06-04
    • 2021-08-26
    • 2013-01-11
    相关资源
    最近更新 更多