2014-10-31 29 views
1

我有一個使用Hibernate Search(由Lucene索引支持)和Infinispan的應用程序。我做不是使用Hibernate Core來加載我的數據(這應該是罰款,因爲我相信3.2)。如何通過API調用Infinispan或Hibernate Search將單個項目編入索引?

在啓動時的應用程序加載大量的數據爲從各種來源的Infinispan緩存。我發現如果我們離開自動索引(即指定hibernate.search.indexing_strategy =手冊)該高速緩存插入件(和相關聯的索引)中使用了大量的存儲器,並會經常不能完成的。爲了解決這個問題,我禁用了自動索引,並且在插入所有初始數據之後,在緩存上運行批量/質量索引器 - 這隻需要幾秒鐘,並且工作正常。

我的問題是,我定期插入/更新/從緩存中刪除的項目,我無法找到一個方法來告訴Infinispan的兩種或休眠搜索以[重新]索引這些項目。我能從Hibernate Search Docs找到最接近的一個Hibernate會話,並且只能在託管對象上工作。我不通過Hibernate加載數據,所以這是不可能的。

我如何通過指數API調用的Infinispan或Hibernate Search的個別項目?

我期待着任何幫助,您可以提供一個讓我知道如果你需要任何額外的信息。

謝謝, 詹姆斯

回答

5

的Infinispan沒有提供一個明確的指標()方法。添加一個是個好主意,歡迎您將JIRA作爲功能請求打開。

您可以做的是始終保持自動索引啓用,但隨後禁用每個put()操作的索引使用the withFlags method on AdvancedCache並啓用標記SKIP_INDEXING

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

注意,在這個例子中,第一行是相當緩慢的,所以你要保持參照該緩存做多投放操作。

+1

這是完美的,我愛你。 – KnownColor 2014-10-31 23:30:53

相關問題