2009-08-03 95 views
1

我從其他人創建的Lucene索引開始。我想找到給定單詞後面的所有單詞。我已經提取從索引感興趣的項(org.apache.lucene.index.Term),我可以找到它包含該項目的文件:如何從Lucene索引中獲取下一個術語?

segmentTermDocs = segmentReader.termDocs(term); 
while (segmentTermDocs.next) { 
     doc = segmentReader.document(segmentTermDocs.doc); 
... 
} 

有我找到一種方法該術語在文檔中的位置並提取它後面的術語?

回答

1

由於在您的情況下索引n-grams不是一種選擇,所以需要一些強力。您可以列舉IndexReader's terms and termPositions,但這可能會令人生厭地慢。

更快的方法是通過枚舉術語並使用MultiPhraseQuery一次檢查組實現分而治之的搜索算法。將所有可能的術語拆分成合理大小的組(比如1000),然後用每個塊和前綴字運行MultiPhraseQuery搜索。如果有任何匹配,則遞歸調用子組,直到達到一個單詞。

+0

感謝您的想法!這是爲了生成報告,因此性能不是真正的問題。我最終做了一個強力搜索,創建了PhraseQuerys,它包含了興趣項和索引中的所有其他項。那些具有匹配的查詢指出了感興趣的術語後面的術語。 – 2009-08-04 19:34:41

相關問題