我有一个使用Lucene.net搜索的文档集。 效果很好。
当我尝试输入新文档时,我在Termbuffer上得到一个空引用异常。当我只是批量插入来初始化文档集时,它工作正常。
我收到此错误:
Object reference not set to an instance of an object. at Lucene.Net.Index.TermBuffer.Set(Term term) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\TermBuffer.cs:line 112
以下是一些实施方案:
public FSDirectory Directory
{
get
{
if (!System.IO.Directory.Exists(LuceneDir))
{
var filePath = new FileInfo(LuceneDir);
filePath.Directory.Create();
}
if (DirectoryTemp == null) DirectoryTemp = FSDirectory.Open(new DirectoryInfo(LuceneDir));
if (IndexWriter.IsLocked(DirectoryTemp)) IndexWriter.Unlock(DirectoryTemp);
var lockFilePath = Path.Combine(LuceneDir, "write.lock");
if (File.Exists(lockFilePath)) File.Delete(lockFilePath);
return DirectoryTemp;
}
}
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30, new HashSet<string>());
using (var writer = new IndexWriter(Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
{
foreach (var sampleData in sampleDatas) AddToLuceneIndex(sampleData, writer);
//writer.Commit();
}
public override void AddToLuceneIndex(T sampleData, IndexWriter writer)
{
try
{
writer.DeleteDocuments(boolQuery);
var doc = new Document();
doc.Add(new Field("MongoId", sampleData.Id, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("PackageId", sampleData.ProductId, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("DosageFormname", sampleData.DosageFormname, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("CompositeName", sampleData.CompositeName, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("ProprietaryName", sampleData.ProprietaryName, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("RouteName", sampleData.RouteName, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("SubstanceName", sampleData.SubstanceName, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Strength", sampleData.Strength, Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Unit", string.Empty, Field.Store.YES, Field.Index.ANALYZED));
writer.AddDocument(doc);
}
catch (Exception ex)
{
throw new Exception("AD:AddToLuceneIndex(T, IndexWriter)::" + ex.Message, ex.InnerException);
}
}
当Indexwriter在Using语句完成之前获得rcycled时会出现此错误。 任何人都知道可能会发生什么?谢谢!