LinqToLucene和Lucene.Net.Linq之间的区别

ali*_*izx 9 linq-to-lucene lucene.net.linq

  1. LinqToLuceneLucene.Net.Linq项目有什么不同?
  2. 每个人的利弊是什么?
  3. 因为我发现Lucene.Net.Linq最近更新相对于LinqToLucene并且它在nuget中可用我想在我的简单项目中使用它,但我遇到了缺少文档而我找不到如何使用lucene使用此包的高级查询,例如LinqToLucene中可能的查询:

    var query = from c in index.Customers
                where c.Like("amber") || c.CompanyName.Between("a", "d")
                where !c.CustomerId == "Jason"
    
    Run Code Online (Sandbox Code Playgroud)

    如果这个扩展功能不可用那么这个项目有什么意义呢?

  4. 如果不是我怎么能在LINQ中使用高级查询到Lucene.Net?

Chr*_*dge 11

LINQ to Lucene似乎不活跃.撰写本文时的最后一次提交是在2012年10月,最后一个询问项目是否有效的讨论帖在同一时间段内没有得到答复.

LINQ to Lucene与实体框架有一些紧密耦合,所以在我看来,该项目旨在索引来自EF的数据进行自由文本搜索.

Lucene.Net.Linq是一个完全独立的项目,我于2012年开始并一直积极维护.此项目与EF或其他库没有任何耦合.它只依赖于Lucene.Net,Common.Logging用于日志记录,Remotion.Linq用于帮助LINQ查询解析和转换.我最初评估了为LINQ贡献Lucene的可能性,但发现与EF的紧密耦合和其他一些假设使得库不适合我的需求.

LINQ to Lucene缺点:

  1. 不适用于NuGet
  2. 没有积极维护
  3. 您可以在条款中加入的内容非常有限where
  4. 无论你是否愿意,都可以加入EF

Lucene.Net.Linq专业人士:

  1. 积极维护
  2. 发布到NuGet的包(和符号!)
  3. 更好地理解复杂的查询
  4. Fluent和Attribute API,用于将属性映射到字段并控制分析,存储和索引

Lucene.Net.Linq缺点:

  1. 文档可能会更好
  2. 我自己以外只有少数贡献
  3. 与香草Lucene.Net相比性能不明确(没有进行太多性能测试)

这样的文档包含项目README和单元测试项目中的示例代码.

Lucene.Net.Linq没有Lucene.Net本身支持的每个查询的扩展方法.但是,它确实提供了一个逃生舱,你可以自己传递Query:

var result = customers
            .Where(new TermRangeQuery("CompanyName", "A", "C", includeLower: true, includeUpper: true))
            .ToList();
Run Code Online (Sandbox Code Playgroud)

它支持使用模糊匹配搜索任何索引字段:

var result = customers
            .Where(c => (c.AnyField() == "amber").Fuzzy(1.0f))
            .ToList();
Run Code Online (Sandbox Code Playgroud)

它支持简单匹配==!=:

var result = customers
            .Where(c => c.CustomerId != "Jason")
            .ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,其含义==取决于给定字段的索引方式.如果该字段被索引为关键字,则完全匹配生效.如果字段被标记化,阻塞,转换为小写等,那么==将匹配字段中的任何术语.