2014-01-28 63 views
0

有人有一個想法,如何通過lucene搜索器加載字段lazy? 我不明白這一點...Lucene - 來自文檔的延遲加載字段

我的Lucene指數法的文檔中包含這樣的字段:

  • UF1:保存字段1
  • UF2:保存字段2
  • ... :其他一些保存字段
  • SF1 - 存儲字段1
  • SF2 - 存儲字段2 - >但是,這其中有非常非常多的文字

所以現在我在索引上搜索。當我得到非常多的結果文檔時,似乎SF2中的所有內容都是由lucene加載的,所以RAM的上升速度非常快。 但是,我需要通過此搜索獲得的唯一字段是SF1。此搜索將永遠不會使用SF2。

是否有可能從beeing加載到生成的文檔中排除該特殊字段「SF2」。

// Some initializing and query preparing... 
final IndexSearcher searcher = new IndexSearcher(this.getReader()); 
TopDocs hits = searcher.search(query, maxResults); 
ScoreDoc[] scoreDocs = hits.scoreDocs; 
for (final ScoreDoc score : scoreDocs) { 
    final Document document = searcher.doc(score.doc); 
    final String value = document.get("SF1"); // <-- This is the only needed field of result doc 
    // collecting value ... 
} 

編輯:4.1的Lucene Java的API

回答

2

兩個IndexReaderIndexSearcher有方法.document(int docID, Set<String> fieldsToLoad)在那裏你可以指定你要加載的領域。

只需使用它並排除沒有必要的內容。

+0

嗨Mindas,感謝您的快速響應!我會嘗試並報告結果。現在我可以說,內存消耗看起來和以前一樣高(沒有字段集合)。你知道嗎,如果lucene內部可能在這裏加載所有字段:'TopDocs hits = searcher.search(query,maxResults);' – user3244938

+0

'TopDocs',如果我沒有記錯的話,只包含數組引用索引中的文檔, 。 – mindas

+0

回來了!只是比較了一些查詢與fieldsToLoad和沒有。與jconsole連接到我的程序中,它們在RAM消耗方面沒有任何區別。我嘗試使用「IndexSearcher.search」和「IndexSearcher.searchAfter」逐步加載結果。但那是急劇下降的速度。 – user3244938