Lucene.Net 文件被锁问题,请大家指点一下

lyljr08 2010-04-27 09:06:30
public void GetIndex(int inum)
{
//定义分析器
Analyzer KTDanalyzer = new KTDictSegAnalyzer(dictPath);

//PerFieldAnalyzerWrapper可以对不同的Field进行不同的分析
PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(KTDanalyzer);

wrapper.AddAnalyzer("ID", KTDanalyzer);
wrapper.AddAnalyzer("ProbContent", KTDanalyzer);
wrapper.AddAnalyzer("DateTime", KTDanalyzer);
//判断是否已有索引
bool isure = !IndexReader.IndexExists(_indexDirectory);
//创建索引的数据条数
allNum = dt.Rows.Count;

//实例化IndexWriter
_writer = new IndexWriter(_indexDirectory, wrapper, isure); //创建IndexWriter
_writer.SetUseCompoundFile(true); //显式设置索引为复合索引
_writer.SetMaxFieldLength(int.MaxValue); //设置域最大长度为最大值
_writer.SetMergeFactor(allNum + 100); //设置每100个段合并成一个大段
_writer.SetMaxMergeDocs(10000); //设置一个段的最大文档数
_writer.SetMaxBufferedDocs(1000); //设置在把索引写入磁盘前内存里文档的缓存个数
//创建IndexReader
IndexReader reader = null;
bool needre = inum == 1;

reader = IndexReader.Open(_indexDirectory);
Lucene.Net.Store.Directory ramdirectory = new RAMDirectory(_indexDirectory);
//文件是否锁住_indexDirectory索引文件地址
if (IndexReader.IsLocked(_indexDirectory))
{
IndexReader.Unlock(ramdirectory);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
cpNum = i + 1;
string ProbID = dt.Rows[i]["PC_ProblemID"].ToString();
string title = parseHtml(dt.Rows[i]["PC_ProbContentHtml"].ToString());

if (title.Length > 2)
{
if (needre)
{
Term term = new Term("ID", ProbID);
reader.DeleteDocuments(term);
}

AddDocument(_writer, ProbID, title, DateTime.Now.ToString());
}
}
reader.Close();
_writer.Optimize();
_writer.Close();
}


static void AddDocument(IndexWriter writer, string StringID, string ProbContent, string Prob_Date)
{
Document document = new Document();
document.Add(new Field("ID", StringID, Field.Store.YES, Field.Index.UN_TOKENIZED));
document.Add(new Field("ProbContent", ProbContent, Field.Store.NO, Field.Index.TOKENIZED));
document.Add(new Field("DateTime", Prob_Date, Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.AddDocument(document);
}


运行后给出的错误是:
Lock obtain timed out: SimpleFSLock@D:\SmartBible\SmartBible\Index\IndexDirectory\write.lock

网上资料说是也说明了使用 "IndexReader.isLocked"、"IndexReader.unlock"来解决文件锁的问题
我添加了下面这段代码可依然不能更新
//文件是否锁住_indexDirectory索引文件地址
if (IndexReader.IsLocked(_indexDirectory))
{
IndexReader.Unlock(ramdirectory);
}
请大家指点一下
...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wosizy 2010-04-27
  • 打赏
  • 举报
回复
创建索引库时被IIS锁定了??
jiankeqcaf 2010-04-27
  • 打赏
  • 举报
回复
太复杂,期待高手
netna 2010-04-27
  • 打赏
  • 举报
回复
没用过,帮顶!
wxhysoftsodc 2010-04-27
  • 打赏
  • 举报
回复
mark 帮顶

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧