2016-05-30 132 views
1

我試圖索引文件(.doc,.ppt,.pdf等)作爲附件(將內容字段存儲爲BASE64內容),然後執行搜索查詢並突出顯示結果文件上的內容字段。 當我編制索引時,爲什麼文件的大小增加了?文檔索引大小超過原始大小

例如:從中索引文檔的文件夾總大小爲30mb。但頭插件顯示了相同數量的文件(這是從同一個文件夾索引)127MB

這裏是我的映射風格:

var response= client.CreateIndex(defaultIndex, c => c 
        .Mappings(m => m 
        .Map<Document>(mp => mp 
        .Properties(ps => ps 
         .String(s => s.Name(e => e.Title)) 
         .Attachment(s => s.Name(p => p.File) 
          .FileField(ff => ff.Name(f => f.File) 
          .TermVector(TermVectorOption.WithPositionsOffsetsPayloads) 
          .Analyzer("english") 
          .Store(true))))))); 

觀察:(不知道如果我用正確的這個) 當我使用手動編號爲文檔建立索引時,大小約爲36mb,但是當我刪除I​​d字段和索引時,索引需要很多時間,大小更大,搜索功能無法正常工作。它依賴於文件是如何索引?)

TIA

回答

1

索引的大小取決於許多不同的因素。您的文件夾的原始大小並不能很好地估計索引的重量。

它很大程度上取決於您的字段映射,即如果您使用大量文本內容(似乎是您的情況)對索引字段進行索引,如果您有使用ngrams標記器和/或標記過濾器的自定義分析器,等等。Lucene商店many different kind of files和相同的標記(帶有額外的位置和偏移量)可能在不同的文件中,所有這些都會加上索引的大小。另外,如果您在測試過程中反覆重複索引您的文件夾幾次,那麼索引大小將會增加,因爲您將有大量的已刪除文檔。

最後,BASE64被inflate your content所知約三分之一。

+0

如果您在測試過程中反覆重複索引您的文件夾幾次,索引大小將增加,因爲您將有大量已刪除的文檔。但是,我正在刪除現有文檔並創建一個新索引每次。那麼這個效果呢?我使用的是「英文」分析儀,除此之外沒有任何內容。由於我在索引文檔,所以文本內容相當高。 – ASN

+0

嘗試在沒有分析器的情況下爲您的文檔建立索引,無需存儲位置和偏移量,而無需存儲內容,即儘可能使用最簡單的設置。你有多少?然後添加存儲並進行比較。然後添加分析儀並進行比較。然後添加位置/偏移量並進行比較等等。您會看到索引的每個「附加設置」都與您的索引大小相加。這很正常。 – Val

+0

Okok。但令我感到驚訝的是,在編制索引時改變了id代。當我使用自動生成的ID對文檔編制索引時,它比使用自定義ID索引文檔花費的空間更多。 (可能是我可能錯過了某些東西,而使用自動ID)所以想知道它是否也取決於此。所以這就是爲什麼這個職位。 – ASN