Max*_*sky 26 c# asp.net lucene asp.net-mvc lucene.net
我正在构建一个ASP.NET MVC站点,我计划使用Lucene.Net.我已经设想了一种构建Lucene使用方法的方法,但不确定我的计划架构是否正常且高效.
Application_StartGlobal.asax中的事件:我检查文件系统上的索引的存在-如果不存在的话,我创建并填写与文件从数据库中提取它.IndexWriter,填写一个文档,写入索引,最后处理掉IndexWriter.IndexWriters没有重用,因为我无法想象在ASP.NET MVC应用程序中这样做的好方法.HttpRuntime.Cache用户是否已经在过去5分钟内搜索过该术语 - 如果有,我会返回这些结果; 否则,我创建一个IndexReader,构建并运行一个查询,将结果放入HttpRuntime.Cache,返回给用户,最后处理掉IndexReader.再次,IndexReaders不再重复使用.Xod*_*rap 15
所有三个问题的答案都是一样的:重复使用读者(可能还有作者).您可以使用单例模式执行此操作(即将您的读/写器声明为公共静态).Lucene的常见问题解答告诉你同样的事情:分享你的读者,因为第一个查询是非常缓慢的.Lucene为您处理所有锁定,因此您没有理由不拥有共享阅读器.
最简单的方法就是保持你的作家和(使用NRT模型)从中获取读者.如果你很少写入索引,或者你对速度没有太大的需求,那么每次打开你的作家都可以.这就是我做的.
编辑:添加了代码示例:
public static IndexWriter writer = new IndexWriter(myDir);
public JsonResult SearchForStuff(string query)
{
IndexReader reader = writer.GetReader();
IndexSearcher search = new IndexSearcher(reader);
// do the search
}
Run Code Online (Sandbox Code Playgroud)
Wya*_*ett 13
我可能会跳过缓存 - Lucene非常非常高效.也许是如此高效,以至于再次搜索比缓存更快.
OnApplication_Start完整索引对我来说有点不合适 - 应该在它自己的线程中运行,以免阻止其他昂贵的启动活动.
| 归档时间: |
|
| 查看次数: |
5643 次 |
| 最近记录: |