gpt4 book ai didi

c# - 在 ASP.NET MVC 站点中正确构建 Lucene.Net 使用

转载 作者:IT王子 更新时间:2023-10-29 04:19:20 25 4
gpt4 key购买 nike

我正在构建一个 ASP.NET MVC 站点,我计划在其中使用 Lucene.Net。我设想了一种构建 Lucene 用法的方法,但不确定我计划的架构是否可行且高效。


我的计划:

  • 在 Global.asax 中的 Application_Start 事件中:我检查文件系统上是否存在索引 - 如果不存在,我创建它并用从中提取的文件填充它数据库。
  • 提交新内容时:我创建了一个 IndexWriter,填充文档,写入索引,最后处理 IndexWriterIndexWriters 未被重用,因为我想不出在 ASP.NET MVC 应用程序中执行此操作的好方法。
  • 编辑内容时:我重复提交新内容时的相同过程,只是我先删除旧内容,然后添加编辑内容。
  • 当用户搜索内容时:我检查 HttpRuntime.Cache 以查看用户是否已经在过去 5 分钟内搜索过该字词 - 如果有,我将返回这些结果;否则,我创建一个 IndexReader,构建并运行查询,将结果放入 HttpRuntime.Cache,将它们返回给用户,最后处理 IndexReader 。再一次,IndexReaders 没有被重用。

我的问题:

  • 这是一个好的结构吗?我该如何改进它?
  • 是否有我应该注意的任何性能/效率问题
  • 此外,不重用 IndexReaders 和 IndexWriters 是不是一种巨大的代码味道?

最佳答案

这三个问题的答案都是一样的:重用您的读者(也可能是您的作者)。您可以使用 singleton模式来做到这一点(即将您的读者/作者声明为公共(public)静态)。 Lucene的FAQ告诉你同样的事情:分享你的读者,因为第一个查询真的很慢。 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
}

关于c# - 在 ASP.NET MVC 站点中正确构建 Lucene.Net 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480974/

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