Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索时Lucene.NET ObjectDisposedException_C#_Lucene_Lucene.net - Fatal编程技术网

C# 搜索时Lucene.NET ObjectDisposedException

C# 搜索时Lucene.NET ObjectDisposedException,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我有一个使用Lucene.Net进行搜索的应用程序。 有一个windows服务构建索引,然后ASP.NET应用程序创建一个IndexSearcher来搜索索引 现在,在尝试进行搜索时,我不断得到以下堆栈跟踪/错误。我无法调试它,因为它已部署在生产环境中 System.ObjectDisposedException: Cannot access a closed file. at System.IO.__Error.FileNotOpen() at System.IO.FileStream.S

我有一个使用Lucene.Net进行搜索的应用程序。
有一个windows服务构建索引,然后ASP.NET应用程序创建一个IndexSearcher来搜索索引

现在,在尝试进行搜索时,我不断得到以下堆栈跟踪/错误。我无法调试它,因为它已部署在生产环境中

System.ObjectDisposedException: Cannot access a closed file.
 at System.IO.__Error.FileNotOpen()
 at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)
 at Lucene.Net.Store.SimpleFSDirectory.SimpleFSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
 at Lucene.Net.Store.BufferedIndexInput.ReadBytes(Byte[] b, Int32 offset, Int32 len, Boolean useBuffer)
 at Lucene.Net.Index.CompoundFileReader.CSIndexInput.ReadInternal(Byte[] b, Int32 offset, Int32 len)
 at Lucene.Net.Store.BufferedIndexInput.Refill()
 at Lucene.Net.Store.BufferedIndexInput.ReadByte()
 at Lucene.Net.Store.IndexInput.ReadVInt()
 at Lucene.Net.Index.TermBuffer.Read(IndexInput input, FieldInfos fieldInfos) 
 at Lucene.Net.Index.SegmentTermEnum.Next()
 at Lucene.Net.Index.SegmentTermEnum.ScanTo(Term term) 
 at Lucene.Net.Index.TermInfosReader.Get(Term term, Boolean useCache) 
 at Lucene.Net.Index.TermInfosReader.Terms(Term term) 
 at Lucene.Net.Index.SegmentReader.Terms(Term t) 
 at Lucene.Net.Index.DirectoryReader.MultiTermEnum..ctor(IndexReader topReader, IndexReader[] readers, Int32[] starts, Term t) 
 at Lucene.Net.Index.DirectoryReader.Terms(Term term) 
 at Lucene.Net.Search.WildcardTermEnum..ctor(IndexReader reader, Term term) 
 at Lucene.Net.Search.WildcardQuery.GetEnum(IndexReader reader) 
 at Lucene.Net.Search.MultiTermQuery.ConstantScoreAutoRewrite.Rewrite(IndexReader reader, MultiTermQuery query) 
 at Lucene.Net.Search.MultiTermQuery.Rewrite(IndexReader reader) 
 at Lucene.Net.Search.WildcardQuery.Rewrite(IndexReader reader) 
 at Lucene.Net.Search.BooleanQuery.Rewrite(IndexReader reader) 
 at Lucene.Net.Search.IndexSearcher.Rewrite(Query original) 
 at Lucene.Net.Search.Query.Weight(Searcher searcher) 
 at Lucene.Net.Search.Searcher.CreateWeight(Query query) 
 at Lucene.Net.Search.Searcher.Search(Query query, Filter filter, Int32 n, Sort sort)

更多信息:我认为这是因为试图打开一个在创建之前崩溃的索引。自从你问这个问题以来,已经过了很长时间。你找到问题的原因了吗?基本上,它是试图搜索一个从未完成的索引。我猜索引过程在完成之前就崩溃了。一个常见的问题是,每当需要添加新文档时,都会不断创建IndexWriter。取决于这是如何完成的,如果它可以通过多个线程实现,IW-ctor可能会被处于中间状态的文件弄糊涂,而只是快速删除索引。只保留一个IW实例。IW上的操作(删除、更新等)是线程安全的。通过使用“searcher=newindexsearcher(writer.GetReader())”创建搜索器进行搜索(这里有许多性能差异,但这是一个简单的例子)更多信息:我认为这是因为试图打开一个在创建之前崩溃的索引。自从你问这个问题以来,已经过了很长时间。你找到问题的原因了吗?基本上,它是试图搜索一个从未完成的索引。我猜索引过程在完成之前就崩溃了。一个常见的问题是,每当需要添加新文档时,都会不断创建IndexWriter。取决于这是如何完成的,如果它可以通过多个线程实现,IW-ctor可能会被处于中间状态的文件弄糊涂,而只是快速删除索引。只保留一个IW实例。IW上的操作(删除、更新等)是线程安全的。通过使用“searcher=newindexsearcher(writer.GetReader())”创建搜索器进行搜索(这里有许多性能差异,但这是一个简单的例子)