Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于将Lucene.NET集成到ASP.NET MVC应用程序,有什么建议吗?_C#_Asp.net Mvc 3_Lucene.net - Fatal编程技术网

C# 对于将Lucene.NET集成到ASP.NET MVC应用程序,有什么建议吗?

C# 对于将Lucene.NET集成到ASP.NET MVC应用程序,有什么建议吗?,c#,asp.net-mvc-3,lucene.net,C#,Asp.net Mvc 3,Lucene.net,我想知道,对于将基于Lucene.NET的搜索集成到ASP.NET MVC web应用程序,是否有任何建议、最佳实践或顶级技巧 我在不同地方读过(或认为我读过)的内容包括: 一个IndexWriter,许多IndexReaders 更新索引时,重置/重新初始化IndexReaders 在开始之前,我是否应该阅读其他有用的提示或资源 谢谢, Kieron以下是我的建议(无特定顺序): 选择最合适的锁定机制 使用SetRAMBufferSizeMB可以减少写入索引时的磁盘I/O开销 不要过度使

我想知道,对于将基于Lucene.NET的搜索集成到ASP.NET MVC web应用程序,是否有任何建议、最佳实践或顶级技巧

我在不同地方读过(或认为我读过)的内容包括:

  • 一个
    IndexWriter
    ,许多
    IndexReader
    s
  • 更新索引时,重置/重新初始化
    IndexReader
    s
在开始之前,我是否应该阅读其他有用的提示或资源

谢谢,
Kieron

以下是我的建议(无特定顺序):

  • 选择最合适的锁定机制
  • 使用SetRAMBufferSizeMB可以减少写入索引时的磁盘I/O开销
  • 不要过度使用SetMaxBufferedDocs属性
  • 使用搜索命中(TopDocs和ScoreDoc[])对象检索索引搜索结果
  • 索引写入是一项昂贵的操作,因此请谨慎使用
  • 了解要编制索引的数据,因为如果数据类型(如日期)存储不一致,则很难对其进行搜索
我以前的一个项目中有几个问题:

  • 我不得不使用BooleanQuery执行传统的AND操作来搜索多个字段
  • Lucene中没有更新功能,因此需要删除并重新添加文档
  • 不能对标记化字段进行排序/排序

我建议查看RavenDb的源代码,因为它是在Lucene之上构建的,并使用了许多最佳实践。

RavenDb绝对是最简单的方法——它确实是Lucene++

就如何使用它而言,我建议您看看潜文本博客引擎。代码是MIT授权的,所以您可以在项目中使用它,并且它有一个设计非常好的索引编写器/读取器


在我们的应用程序中,我们倾向于有一个编写器和一个单独的应用程序以及多个阅读器。锁定策略在这里很关键——尤其要确保读者不要试图锁定索引。我没有提到我们为实现这一点而必须使用的特定术语。

我记得在通过UNC访问Lucene文件时遇到问题,但记不清到底是什么问题。非常好的提示,干杯。锁定对我来说似乎有点随机……你知道任何地方详细说明了不同类型的锁及其用法吗?你完全可以在lucene中进行更新——你只需找到文档,更新字段,然后用相同的键将其重新添加到索引中。@Wyatt,键是documentid,在一个段中它从未更改过。您是否在考虑IndexWriter.UpdateDocument,它执行删除+添加操作?非常好的提示,尤其是关于锁定的提示。谢谢。我同意RavenDb真的很特别