【发布时间】:2012-08-24 20:18:12
【问题描述】:
我正在设置一个托管 Lucene.Net / AzureDirectory 搜索引擎的 WCF Web 服务。
出于速度目的,使用AzureDirectory 的推荐方法是拥有一个可供所有服务调用使用的单例IndexSearcher 实例。这是我必须做的:
public class LuceneHelper
{
private static IndexSearcher _searcher;
public static IndexSearcher searcher
{
get
{
if (_searcher == null)
initSearcher();
return _searcher;
}
}
public static void initSearcher()
{
_searcher = new IndexSearcher(azureDirectory);
}
...
}
由于该对象缓存了它正在搜索的索引,我需要在与任何客户端调用异步的时间间隔内重新初始化该对象......就像每分钟左右一样。所以我尝试在我的 azure 实例上的另一个线程中设置一个运行该进程的进程...
LuceneHelper.initSearcher();
while (true)
{
Thread.Sleep(60000);
LuceneHelper.initSearcher();
}
我可以从我的测试中看出它们都在工作,但彼此独立。所以我猜我的网络服务中有一个 IndexSearcher,我的工作线程中有一个。
我的问题:有没有办法在我的 web 服务中异步运行我的无限“while”语句,或者以任何其他方式在没有客户端调用的情况下重新初始化对象?
【问题讨论】:
-
为什么需要每隔一段时间重新打开 IndexSearcher?看起来您想要使用 Lucene 进行近乎实时的搜索,blog.mikemccandless.com/2011/06/…
-
通过提前初始化 IndexSearcher,它会缓存索引,这也是 Lucene.Net 如此快速的原因。我需要重新打开它的原因是刷新该缓存。
标签: .net web-services asynchronous singleton lucene.net