Lucene索引大小太大
我正试图构建一个包含5000个文档的Lucene索引,而正在创建的索引似乎变得太大了。我想知道是否有办法缩小索引的大小 我使用的是Lucene 4.10,我想索引的文档有各种格式(.docx、.xlsx、.pdf、.rtf、.txt)。包含我正在索引的文档的目录大小约为1Gb。索引3000/5000个文档后,索引大小已经是10Gb。我还没有找到任何关于目录大小与索引大小的正常比率的有用信息,但是对于只有1Gb的文档来说,10Gb的索引似乎太大了 为了读入文档,我使用Tika 1.6 AutoDetectParser生成一个包含每个文档内容的字符串 下面的snipplet展示了我如何尝试构建索引。创建索引编写器后,它调用方法walkFiles()遍历文档目录,读取每个文档(使用“DocReader”类)并将其添加到索引中:Lucene索引大小太大,lucene,Lucene,我正试图构建一个包含5000个文档的Lucene索引,而正在创建的索引似乎变得太大了。我想知道是否有办法缩小索引的大小 我使用的是Lucene 4.10,我想索引的文档有各种格式(.docx、.xlsx、.pdf、.rtf、.txt)。包含我正在索引的文档的目录大小约为1Gb。索引3000/5000个文档后,索引大小已经是10Gb。我还没有找到任何关于目录大小与索引大小的正常比率的有用信息,但是对于只有1Gb的文档来说,10Gb的索引似乎太大了 为了读入文档,我使用Tika 1.6 AutoDe
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参数创建内容字段。我找不到关于减少索引大小的其他有用信息。我还想知道是否有人有真实世界的数据,说明索引与被索引文档的总大小相比有多大。我认为您遇到的是编码问题,而不是Lucene问题 您正在创建一个文档“addDoc”,并在将所有文档添加到索引时重新使用它。这不一定是个坏主意(不过,我可能不会麻烦)。但您似乎没有在添加另一个文档之前清除数据。因此,这将导致添加每个后续文档,其中包含前面文档的所有数据 最简单的更改是每次阅读文档时创建一个新文档,并将其添加到索引中。祈祷吧,你的食指会直线下降
祝你好运,我认为你遇到的是编码问题,而不是Lucene问题 您正在创建一个文档“addDoc”,并在将所有文档添加到索引时重新使用它。这不一定是个坏主意(不过,我可能不会麻烦)。但您似乎没有在添加另一个文档之前清除数据。因此,这将导致添加每个后续文档,其中包含前面文档的所有数据 最简单的更改是每次阅读文档时创建一个新文档,并将其添加到索引中。祈祷吧,你的食指会直线下降
祝你好运,是的,事实证明这就是问题所在。谢谢你的帮助!是的,事实证明这就是问题所在。谢谢你的帮助!