我正在嘗試構建大約5000個文檔的Lucene索引,並且正在創建的索引似乎變得太大。我想知道是否有辦法縮小索引的大小。Lucene索引大小太大
我使用的是Lucene 4.10,我想索引的文檔是各種格式(.docx,.xlsx,.pdf,.rtf,.txt)。包含我索引文檔的目錄大小約爲1Gb。索引3000/5000文檔後,索引大小已經是10Gb。我還沒有找到任何關於目錄大小與索引大小之間的正常比例的有用信息,但10Gb索引似乎對於僅1Gb的文檔來說太大了。
要閱讀文檔,我使用Tika 1.6 AutoDetectParser生成一個包含每個文檔內容的字符串。
下面的snipplet顯示了我正試圖建立一個索引。創建索引作家後,它會調用一個方法walkFiles()遍歷文件目錄,讀取每個文件(使用「文件閱讀器」類),並將其添加到索引:
public void indexDocs() {
docDir = "C:/MyDocDir";
indexPath = "C:/DocIndex";
docIndexDir = FSDirectory.open(new File(indexPath));
analysis = new StopAnalyzer();
iwc = new IndexWriterConfig(Version.LUCENE_4_10_0, analysis);
iwc.setOpenMode(OpenMode.CREATE);
docIndex = new IndexWriter(docIndexDir, iwc);
addDoc = new Document();
walkFiles(docDir);
docIndex.close();
}
private void walkFiles(String docDir) {
File docRoot = new File(docDir);
File[] list = docRoot.listFiles();
if (list == null) return;
for (File f : list) {
if (f.isDirectory()) {
walkFiles(f.getAbsolutePath());
}
else {
String docName = f.getAbsolutePath();
DocReader readDoc = new DocReader(docName);
if (readDoc.readFile()) {
String docPath = readDoc.getPath();
String docText = readDoc.getText();
Field pathField = new StringField("path", docPath, Field.Store.NO);
Field contentField = new TextField("contents", docText, Field.Store.NO);
addDoc.add(pathField);
addDoc.add(contentField);
docIndex.addDocument(addDoc);
}
}
}
}
請注意,我使用StopAnalyzer並使用Field.Store.NO參數創建內容Field。我找不到其他有用的信息來減少索引大小。我也很想知道,如果任何人都有真實世界的數字,指出索引與索引文檔的總大小相比有多大。
是的,事實證明,這是問題。謝謝您的幫助! – linuxguru 2014-09-29 01:20:47