1

ドキュメント内の検索には、lucene.net バージョン 2.0 dll を使用します。ドキュメントを公開すると、インデックス作成のためにドキュメントのコンテンツが lucene に渡されます。すべてが正常に機能していました。しかし、別のドキュメントを公開すると、以下のエラーがスローされます。

System.IO.IOException: read past EOF
at Lucene.Net.Store.BufferedIndexInput.Refill()
at Lucene.Net.Store.BufferedIndexInput.ReadByte()
at Lucene.Net.Store.IndexInput.ReadInt()
at Lucene.Net.Index.IndexWriter.ReadDeleteableFiles()
at Lucene.Net.Index.IndexWriter.DeleteSegments(ArrayList segments)
at Lucene.Net.Index.IndexWriter.MergeSegments(Int32 minSegment, Int32 end)
at Lucene.Net.Index.IndexWriter.FlushRamSegments()
at Lucene.Net.Index.IndexWriter.Optimize()

問題は、インデックスを再作成するために再度公開する必要があるドキュメントが何千もあるため、lucene によって作成されたファイルを削除できないことです。このエラーが発生する解決策および/または考えられる理由を提案してください??

Analyzer analyzer = new StandardAnalyzer();
Lucene.Net.Store.Directory directory = FSDirectory.GetDirectory(lucenePath, false);

try
{
    IndexReader ir = IndexReader.Open(lucenePath);
    ir.DeleteDocuments(new Term("id", document.Lang + "-" + document.IDDoc));
    ir.Close();
}
catch (Exception) { }

IndexWriter iwriter;
try
{
    iwriter = new IndexWriter(directory, analyzer, false);
}
catch (Exception)
{
    iwriter = new IndexWriter(directory, analyzer, true);
}
iwriter.SetMaxFieldLength(25000);
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
doc.Add(new Lucene.Net.Documents.Field("content", fulltext, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
doc.Add(new Lucene.Net.Documents.Field("title", document.DocName, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
doc.Add(new Lucene.Net.Documents.Field("id", document.Lang + "-" + document.IDDoc, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.UN_TOKENIZED));
iwriter.AddDocument(doc);
iwriter.Optimize();
iwriter.Close();
directory.Close();
4

1 に答える 1