我需要索引大约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();
答案 0 :(得分:4)
显然,我已经下载了一个3年前版本的Lucene,由于某种原因从项目的主页突出显示链接...下载了最新的Lucene源代码,编译后,使用了新的DLL,修复了一下一切。文档有点糟糕,但价格合适且速度快。
首先,你必须添加 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版本,除非您需要特定的更高版本。