适当的LINQ到Lucene指数<;T>;ASP.NET的使用模式?
LINQ to Lucene的适当的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
索引的正确使用模式是什么
它实现了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服务优化索引时,没有其他进程可以将文档写入索引