Lucene.Net.Index.TermBuffer null引用异常

时间:2015-02-03 20:21:32

标签: 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\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时会出现此错误。 任何人都知道可能会发生什么?谢谢!

0 个答案:

没有答案