Lucene索引大小太大

Lucene索引大小太大,lucene,Lucene,我正试图构建一个包含5000个文档的Lucene索引,而正在创建的索引似乎变得太大了。我想知道是否有办法缩小索引的大小 我使用的是Lucene 4.10,我想索引的文档有各种格式(.docx、.xlsx、.pdf、.rtf、.txt)。包含我正在索引的文档的目录大小约为1Gb。索引3000/5000个文档后,索引大小已经是10Gb。我还没有找到任何关于目录大小与索引大小的正常比率的有用信息,但是对于只有1Gb的文档来说,10Gb的索引似乎太大了 为了读入文档,我使用Tika 1.6 AutoDe

我正试图构建一个包含5000个文档的Lucene索引,而正在创建的索引似乎变得太大了。我想知道是否有办法缩小索引的大小

我使用的是Lucene 4.10,我想索引的文档有各种格式(.docx、.xlsx、.pdf、.rtf、.txt)。包含我正在索引的文档的目录大小约为1Gb。索引3000/5000个文档后,索引大小已经是10Gb。我还没有找到任何关于目录大小与索引大小的正常比率的有用信息,但是对于只有1Gb的文档来说,10Gb的索引似乎太大了

为了读入文档,我使用Tika 1.6 AutoDetectParser生成一个包含每个文档内容的字符串

下面的snipplet展示了我如何尝试构建索引。创建索引编写器后,它调用方法walkFiles()遍历文档目录,读取每个文档(使用“DocReader”类)并将其添加到索引中:

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”,并在将所有文档添加到索引时重新使用它。这不一定是个坏主意(不过,我可能不会麻烦)。但您似乎没有在添加另一个文档之前清除数据。因此,这将导致添加每个后续文档,其中包含前面文档的所有数据

最简单的更改是每次阅读文档时创建一个新文档,并将其添加到索引中。祈祷吧,你的食指会直线下降


祝你好运,

是的,事实证明这就是问题所在。谢谢你的帮助!是的,事实证明这就是问题所在。谢谢你的帮助!