如何优化Lucene.Net索引

如何优化Lucene.Net索引,lucene,lucene.net,Lucene,Lucene.net,我需要索引大约10GB的数据。我的每一个“文档”都很小,想想关于一个产品的基本信息,大约20个数据字段,大多数只有几个字。只有一列被索引,其余的被存储。我从文本文件中获取数据,所以这部分速度非常快 当前的索引速度仅为每小时40mb左右。我听其他人说他们比这快了100倍。对于较小的文件(大约20mb),索引速度相当快(5分钟)。然而,当我让它循环遍历我所有的数据文件(大约50个文件,总计10gb)时,随着时间的推移,索引的增长似乎慢了很多。关于如何加快索引速度,或者最佳索引速度是什么,有什么想法吗

我需要索引大约10GB的数据。我的每一个“文档”都很小,想想关于一个产品的基本信息,大约20个数据字段,大多数只有几个字。只有一列被索引,其余的被存储。我从文本文件中获取数据,所以这部分速度非常快

当前的索引速度仅为每小时40mb左右。我听其他人说他们比这快了100倍。对于较小的文件(大约20mb),索引速度相当快(5分钟)。然而,当我让它循环遍历我所有的数据文件(大约50个文件,总计10gb)时,随着时间的推移,索引的增长似乎慢了很多。关于如何加快索引速度,或者最佳索引速度是什么,有什么想法吗

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

更新——以下是索引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));
然后从tab delim数据文件中读取:

    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();

显然,我从项目主页上下载了一个3年前的Lucene版本,由于某种原因,该版本被显著链接到……下载了最新的Lucene源代码,经过编译,使用了新的DLL,修复了所有问题。文档有点差劲,但是价格合适而且速度很快

首先,你必须补充 将Lucene库添加到您的项目中。 在Lucene.NET网站上,您将看到 的最新版本 卢森。这是两年前的Do 不要抓住它们,它们有一些虫子。 目前还没有官方发布 Lucene的一段时间,可能是因为 资源的限制 维护者。使用Subversion(或 (乌龟)四处浏览并抓取 最新更新的Lucene.NET 来自apachesvn存储库的代码。 解决方案和项目是可视化的 Studio 2005和.NET 2.0,但我 将项目升级到Visual Studio 2008年没有任何问题。我能 要构建解决方案而不需要任何 错误。转到bin目录,抓取 打开Lucene.Net dll并将其添加到 项目


由于我无法对上面与3年前版本相关的标记答案发表评论,因此我强烈建议在将Lucene.NET添加到您的项目中时安装Visual Studio extension for NuGet Package Manager。它应该为您添加最新的DLL版本,除非您需要特定的更高版本。

您可以详细说明(a)使用的文档总数(b)analyzer(c)索引字段的长度吗?另外,请确认,您是否正在使用IndexWriter?文档总数约为10000000。标准分析器。是的,我正在重新使用IndexWriter和Document,但无法重新使用字段,因为C#端口似乎没有实现字段.SetValue。实际上,我只是在一个专用服务器上加载了这个字段,SetMaxBufferDocs的值为25000。一开始速度很快…但8小时后,现在索引只有150mb左右。这看起来真的很慢。你能发布你的索引代码吗?好的,我用索引代码更新了这个问题。有趣的是,在过去的两个小时里,它一直在嘎嘎作响,但根本没有更新索引文件。。。