LINQ to Lucene 似乎处于非活动状态。撰写本文时的最后一次提交是在 2012 年 10 月,而最后一次询问该项目是否活跃的讨论帖子自同一时间段以来一直没有得到答复。
LINQ to Lucene 与实体框架有一些紧密的耦合,因此在我看来,该项目旨在索引来自 EF 的数据以进行自由文本搜索。
Lucene.Net.Linq 是一个完全独立的项目,我于 2012 年启动并一直在积极维护。该项目与 EF 或其他库没有任何耦合。它仅依赖于 Lucene.Net、Common.Logging 进行日志记录,以及 Remotion.Linq 来帮助进行 LINQ 查询解析和转换。我最初评估了为 LINQ to Lucene 做出贡献的可能性,但发现与 EF 的紧密耦合和其他一些假设使得该库不适合我的需求。
LINQ 到 Lucene 的缺点:
- 在 NuGet 上不可用
- 没有积极维护
- Very 你可以放入什么
where
clause
- 无论您是否愿意,都可以与 EF 耦合
Lucene.Net.Linq 优点:
- 积极维护
- 发布到 NuGet 的包(和符号!)
- 更好地理解复杂查询
- Fluent 和 Attribute API 可将属性映射到字段并控制分析、存储和索引
Lucene.Net.Linq 缺点:
- 文档可以更好
- 除了我自己的贡献之外,只有少数贡献
- 性能与普通 Lucene.Net 相比不清楚(没有进行太多性能测试)
该文档由项目 README 和sample https://github.com/themotleyfool/Lucene.Net.Linq/tree/master/source/Lucene.Net.Linq.Tests/Samples单元测试项目中的代码。
Lucene.Net.Linq 并不为 Lucene.Net 原生支持的每个查询提供扩展方法。然而,它确实提供了一个逃生舱口,您可以通过自己的逃生舱口Query
:
var result = customers
.Where(new TermRangeQuery("CompanyName", "A", "C", includeLower: true, includeUpper: true))
.ToList();
它支持使用模糊匹配搜索任何索引字段:
var result = customers
.Where(c => (c.AnyField() == "amber").Fuzzy(1.0f))
.ToList();
并且支持简单匹配==
and !=
:
var result = customers
.Where(c => c.CustomerId != "Jason")
.ToList();
注意其含义==
由给定字段的索引方式控制。如果该字段被索引为关键字,则精确匹配生效。如果字段被标记化、词干化、转换为小写等,那么==
将匹配该字段中的任何术语。