如何优化Lucene.Net索引

时间:2010-10-08 05:31:11

标签: lucene lucene.net

我需要索引大约10GB的数据。我的每个“文档”都非常小,想想有关产品的基本信息,大约20个数据字段,大多数只有几个字。仅索引1列,其余列存储。我正在从文本文件中获取数据,因此该部分非常快。

目前的索引速度仅为每小时约40mb。我听说其他人说他们比这快了100倍。对于较小的文件(大约20mb),索引进行得非常快(5分钟)。但是,当我循环遍历所有数据文件(大约50个文件,总计10gb)时,随着时间的推移,索引的增长似乎放缓了很多。关于如何加快索引速度或最佳索引速度是什么的任何想法?

另外,我注意到.Net端口中的API似乎没有包含与Java中原始相同的所有方法...

更新 - 这里是索引C#代码的片段: 首先我设置了一下:

            directory = FSDirectory.GetDirectory(@txtIndexFolder.Text, true);
            iwriter = new IndexWriter(directory, analyzer, true);
            iwriter.SetMaxFieldLength(25000);
            iwriter.SetMergeFactor(1000);
            iwriter.SetMaxBufferedDocs(Convert.ToInt16(txtBuffer.Text));

然后从制表符分隔数据文件中读取:

    using (System.IO.TextReader tr = System.IO.File.OpenText(File))
    {
        string line;
        while ((line = tr.ReadLine()) != null)
        {
            string[] items = line.Split('\t');

然后创建字段并将文档添加到索引:

                fldName = new Field("Name", items[4], Field.Store.YES, Field.Index.NO);
                doc.Add(fldName);
                fldUPC = new Field("UPC", items[10], Field.Store.YES, Field.Index.NO);
                doc.Add(fldUPC);
                string Contents = items[4] + " " + items[5] + " " + items[9] + " " + items[10] + " "  + items[11] + " " + items[23] + " " + items[24];
                fldContents = new Field("Contents", Contents, Field.Store.NO, Field.Index.TOKENIZED);
                doc.Add(fldContents);
                ...
                iwriter.AddDocument(doc);

完成索引编制后:

    iwriter.Optimize();
    iwriter.Close();

2 个答案:

答案 0 :(得分:4)

显然,我已经下载了一个3年前版本的Lucene,由于某种原因从项目的主页突出显示链接...下载了最新的Lucene源代码,编译后,使用了新的DLL,修复了一下一切。文档有点糟糕,但价格合适且速度快。

来自helpful blog

  

首先,你必须添加   Lucene库到您的项目。   在Lucene.NET网站上,你会看到   最新版本的版本   Lucene的。这是两年了。 做   不抓住它们,它们有一些错误。   尚未正式发布   Lucene已经有一段时间了,可能是因为   对资源的限制   维护者。使用Subversion(或   TortoiseSVN)浏览并抓住   最近更新的Lucene.NET   来自Apache SVN Repository的代码。   解决方案和项目是Visual   Studio 2005和.NET 2.0,但我   将项目升级到Visual Studio   2008年没有任何问题。我能够   没有任何建立解决方案   错误。转到bin目录,抓住   Lucene.Net dll并将其添加到您的   项目

答案 1 :(得分:0)

由于我无法评论上述与3岁版本相关的明确答案,因此我强烈建议在将Lucene.NET添加到项目时为NuGet Package Manager安装Visual Studio扩展。它应该为您添加最新的DLL版本,除非您需要特定的更高版本。