适当的LINQ到Lucene指数<;T>;ASP.NET的使用模式?

适当的LINQ到Lucene指数<;T>;ASP.NET的使用模式?,asp.net,design-patterns,static,lucene.net,linq-to-lucene,Asp.net,Design Patterns,Static,Lucene.net,Linq To Lucene,LINQ to Lucene的索引的正确使用模式是什么 它实现了IDisposable,因此我认为将其包装在using语句中最有意义: IEnumerable<MyDocument> documents = null; using (Index<MyDocument> index = new Index<MyDocument>(new System.IO.DirectoryInfo(IndexRootPath))) { documents = ind

LINQ to Lucene的
索引的正确使用模式是什么

它实现了
IDisposable
,因此我认为将其包装在using语句中最有意义:

IEnumerable<MyDocument> documents = null;

using (Index<MyDocument> index = new Index<MyDocument>(new System.IO.DirectoryInfo(IndexRootPath)))
{
    documents = index.Where(d => d.Name.Like("term")).ToList();
}
IEnumerable文档=null;
使用(Index=new索引(new System.IO.DirectoryInfo(IndexRootPath)))
{
documents=index.Where(d=>d.Name.Like(“术语”)).ToList();
}
我偶尔会遇到不必要的删除磁盘上的索引的情况。如果索引的多个实例同时存在,这种情况似乎100%都会发生。我使用PLINQ编写了一个测试,并行运行2个搜索,1个搜索有效,而另一个搜索返回0个结果,因为索引为空

  • 我应该使用一个静态实例吗
  • 我应该用
    惰性
    包装它吗
  • 那么,当多个用户同时访问静态索引时,我是否会面临其他问题
我还希望根据需要定期重新编制索引,可能使用另一个进程,如Windows服务。如果用户在重建索引时进行搜索,我是否也会遇到问题?

代码如下所示

大多数完全清除的Lucene索引都是在
create
参数设置为true时创建的新索引编写器。问题中的代码不处理索引,因此很难进一步调试

Net是线程安全的,我希望linq对Lucene也能抑制这种行为。一个静态索引实例会将内容缓存在内存中,但我想您需要自己处理更改的索引重新加载(我不知道linq to lucene是否为您这样做)

在重新编制索引时,使用多个搜索器/读取器应该不会有问题,Lucene是为支持该场景而构建的。但是,每个目录只能有一个writer,因此在windows服务优化索引时,没有其他进程可以将文档写入索引