LINQ to Lucene 的正确使用模式是Index<T>
什么?
它实现IDisposible
了,所以我认为将它包装在 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();
}
我偶尔会遇到意外删除磁盘上的索引的情况。如果索引的多个实例同时存在,似乎 100% 的时间会发生。我使用 PLINQ 编写了一个测试以并行运行 2 个搜索,并且 1 个搜索有效,而另一个返回 0 个结果,因为索引已清空。
- 我应该改用单个静态实例吗?
- 我应该把它包起来
Lazy<T>
吗? - 当多个用户同时访问静态索引时,我是否会对其他问题敞开心扉?
我还想根据需要定期重新索引,可能使用另一个进程,如 Windows 服务。如果用户在重建索引时搜索,我是否也会遇到问题?