我的搜索出现问题,未返回预期的结果。
我尝试对索引运行Luke,但是它说它已被锁定,我需要强制解锁它(尽管我不是Jedi / Sith)
我试图删除索引文件夹并运行我的recreate-indicies应用程序,但该文件夹已锁定。使用解锁器,我发现大约有100个w3wp.exe条目(相同的PID,不同的句柄)在索引上具有锁定。
这是怎么回事?
我正在NHibernate配置中执行此操作:
c.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());
Run Code Online (Sandbox Code Playgroud)
这是我查询索引的唯一位置:
var fullTextSession = NHibernate.Search.Search.CreateFullTextSession(this.unitOfWork.Session);
var fullTextQuery = fullTextSession.CreateFullTextQuery(query, typeof (Person));
fullTextQuery.SetMaxResults(100);
return fullTextQuery.List<Person>();
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我究竟做错了什么?
谢谢
Lucene.Net索引仅阻止对该索引的并发写操作。您可以根据需要从搜索索引中读取/读取任意数量的线程,并且它们不会阻塞-彼此之间或在进行写入的任何人身上,但是,如果您有两个线程同时在索引上进行写入,则有他们中的一个会阻塞另一个的机会。
如果lucene告诉您您的索引已被锁定,则意味着当前正在有人正在对该索引进行写操作,或者(听起来更可能是)正在写该索引的某个内容在写过程中被杀死,因此无法删除该锁。 您应该确保在完成处理后立即正确处理所有写入索引的Lucene对象。
要手动删除锁,需要在Lucene目录中删除一个.lock文件(我的Lucene大书目前不在我身边,所以我不知道确切位置在哪里,而是进行搜索。 Lucene目录中的“ lock”或“ .lock”应该找到它)
w3wp.exe在此目录上具有的句柄可能是线程从lucene索引读取的句柄-尽管这些将阻止您删除目录,但不应阻止您搜索或写入索引。