gpt4 book ai didi

nhibernate - 为什么我的 Lucene 索引被锁定?

转载 作者:行者123 更新时间:2023-12-03 16:25:02 24 4
gpt4 key购买 nike

我的搜索出现问题,无法返回我期望的结果。

我试图在我的索引上运行卢克,但它说它被锁定,我需要强制解锁它(虽然我不是绝地/西斯)

我试图删除索引文件夹并运行我的 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());

这是我查询索引的唯一地方:
var fullTextSession = NHibernate.Search.Search.CreateFullTextSession(this.unitOfWork.Session);

var fullTextQuery = fullTextSession.CreateFullTextQuery(query, typeof (Person));
fullTextQuery.SetMaxResults(100);

return fullTextQuery.List<Person>();

这是怎么回事?我究竟做错了什么?

谢谢

最佳答案

Lucene.Net 索引仅阻塞并发 对索引的操作。您可以拥有任意数量的线程从索引中搜索/读取,并且它们不会阻塞 - 无论是在彼此上还是在任何进行写入的人上,但是如果您有两个线程同时在索引上进行写入,则有他们中的一个会阻止另一个的机会。

如果 lucene 告诉您您的索引已锁定,那么这意味着有人当前正在写入索引,或者(这听起来更有可能)正在写入索引的某些内容在写入期间被杀死,因此无法删除锁定。 您应该确保在写入索引后立即正确处理所有写入索引的 Lucene 对象。

要手动删除锁,您需要在 Lucene 目录中删除一个 .lock 文件(我的 Lucene 大书目前不在我附近,所以我不知道它的确切位置,但是正在搜索Lucene 目录中的“lock”或“.lock”应该可以找到它)

w3wp.exe 在该目录上的句柄可能是从 lucene 索引读取的线程所拥有的句柄 - 尽管它们会阻止您删除目录,但它们不应阻止您搜索或写入索引。

关于nhibernate - 为什么我的 Lucene 索引被锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com