2013-03-09 74 views
0

Lucene索引的內存中表示(與文件格式相反)是什麼樣的?整個反向索引是否加載到內存中作爲發佈列表數組(每個發佈列表包含文檔ID,文檔中的術語頻率和職位)?像Lucene的索引內存中的索引是什麼樣的?

class Posting { 
    private int docID; 
    private int termFreq; 
    private int[] termPositions; 
} 

class PostingList { 
    private Posting[] postings; 
} 

public class SomeClassThatHoldsTheIndexInMemory { 
    private PostingList[] index; // Indexed by some internal term ID? 
} 

東西我明白一切,構成了指標(包括有關條款輔助信息)可能不會在內存中保存,但肯定的東西是什麼?

哪些類定義索引的內存中表示形式?如果索引看起來像上面那樣,Lucene如何從一個術語(一個字符串)轉到一個術語ID(一個int)?

回答

1

Lucene在內存中表示被定義爲認爲RAMDirectory類。基本上,這是一個HashMapString(鍵)和(RAMFile s)。反過來,RAMFile是代表文件字節的字節緩衝區列表。您將存儲在FSDirectory中的相同信息。

Lucene存儲倒排索引。該索引被組織爲一組增量(可能未合併)的分段。每個片段屬於「索引提交」,每個片段或多或少都是另一個倒排索引。您甚至可以找到僅爲一個文檔保存倒排索引的「段」。

「Posting」或Document原始結構一旦添加到索引中就會丟失。此外,你不能迭代整個文檔集合(據我所知)。無論如何,沒有什麼能夠阻止你將你的帖子/文檔存儲在二級結構中,或者在索引中存儲它的序列化版本,或者將它的對象屬性一一存儲爲StoredField;也不在字段中定義自己的「可迭代」文檔ID。

DirectoryReaderSegmentReader s處理索引的內部結構。

在我使用Lucene的時候,我從來沒有看到類似於「術語ID」的東西。但是「文檔ID」是一個常見的概念。