C# Lucene.Net.Index.TermBuffer空引用异常

C# Lucene.Net.Index.TermBuffer空引用异常,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我有一个使用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

我有一个使用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);
        }
    }
public目录
{
得到
{
如果(!System.IO.Directory.Exists(LuceneDir))
{
var filePath=newfileinfo(LuceneDir);
filePath.Directory.Create();
}
如果(DirectoryTemp==null)DirectoryTemp=FSDirectory.Open(newdirectoryinfo(LuceneDir));
如果(IndexWriter.IsLocked(DirectoryTemp))IndexWriter.Unlock(DirectoryTemp);
var lockFilePath=Path.Combine(LuceneDir,“write.lock”);
如果(File.Exists(lockFilePath))File.Delete(lockFilePath);
返回DirectoryTemp;
}
}
var analyzer=new StandardAnalyzer(Lucene.Net.Util.Version.Lucene_30,new HashSet());
使用(var writer=new IndexWriter(目录、分析器、IndexWriter.MaxFieldLength.UNLIMITED))
{
foreach(样本数据中的var sampleData)AddToLuceneIndex(样本数据,编写器);
//writer.Commit();
}
public override void AddToLuceneIndex(T样本数据,索引写入器)
{
尝试
{
writer.DeleteDocuments(boolQuery);
var doc=新文档();
添加文档(新字段(“MongoId”,sampleData.Id,Field.Store.YES,Field.Index.NOT_analysis));
添加文档(新字段(“PackageId”,sampleData.ProductId,Field.Store.YES,Field.Index.NOT_analysis));
添加文档(新字段(“DosageFormname”,sampleData.DosageFormname,Field.Store.YES,Field.Index.NOT_analysis”);
添加(新字段(“CompositeName”,sampleData.CompositeName,Field.Store.YES,Field.Index.analysis));
添加(新字段(“ProprietaryName”,sampleData.ProprietaryName,Field.Store.YES,Field.Index.analysis));
添加文档(新字段(“RouteName”,sampleData.RouteName,Field.Store.YES,Field.Index.Analysis));
新增单据(新增字段(“SubstanceName”,sampleData.SubstanceName,Field.Store.YES,Field.Index.Analysis));
新增单据(新增字段(“强度”,sampleData.Strength,Field.Store.YES,Field.Index.analysis));
新增单据(新增字段(“单位”,string.Empty,Field.Store.YES,Field.Index.analysis));
writer.AddDocument(doc);
}
捕获(例外情况除外)
{
抛出新异常(“AD:AddToLuceneIndex(T,IndexWriter)::”+ex.Message,ex.InnerException);
}
}
当Indexwriter在Using语句完成之前被循环时,它会收到此错误。
有人知道会发生什么吗?谢谢

我试过你的建议。不幸的是,它仍然会导致nullreference异常。我没有看到您看到的异常的明显来源。也许您可以简化并提供一个?我要说的是,您对
FSDirectory
的处理看起来非常粗略。也许可以尝试用
return new RAMDirectory()
替换整个get块,看看是否仍然遇到问题。