首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinqToLucene与Lucene.Net.Linq的区别

LinqToLucene与Lucene.Net.Linq的区别
EN

Stack Overflow用户
提问于 2014-08-14 04:38:37
回答 2查看 3.1K关注 0票数 9
  1. LinqToLuceneLucene.Net.Linq项目是不同的吗?
  2. 他们每个人的优点和缺点是什么?
  3. 由于我发现Lucene.Net.Linq是最近相对于LinqToLucene更新的,而且它在nuget中是可用的,所以我想在我的简单项目中使用它,但是我发现缺乏文档,我无法找到如何使用这个包的lucene高级查询,比如在LinqToLucene中可以使用的: index.Customers中的var query = from c,其中c.Like(“琥珀”)财政(“a”,"d") c.CompanyName.Between("a",“d”) !c.CustomerId == "Jason“ 如果这个扩展函数不可用,那么这个项目的意义是什么?
  4. 如果这不是问题所在,我如何在LINQtoLucene.Net中使用预先查询?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-14 16:27:19

LINQ到Lucene似乎是不活跃的。撰写本报告时的最后一次提交是在2012年10月,最后一次询问项目是否活动的讨论帖子自同一时间框架以来一直没有得到答复。

LINQ到Lucene与实体框架有一些紧密的耦合,所以在我看来,这个项目是为了索引来自EF的数据,以便进行免费的文本搜索。

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

LINQ到Lucene cons:

  1. 在NuGet上不可用
  2. 未积极维护
  3. 非常有限,您可以把它放入where子句中
  4. 不管你愿不愿意都要跟EF联系

Lucene.Net.Linq的优点:

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

Lucene.Net.Linq缺点:

  1. 文件可能会更好
  2. 除了我自己的贡献之外,只有一小部分
  3. 与普通Lucene.Net相比性能不明确(性能测试不多)

这样的文档由单元测试项目中的项目自述和示例代码组成。

Lucene.Net.Linq并不是对Lucene.Net支持的每个查询都有扩展方法。但是,它确实提供了一个可以在您自己的Query中传递的逃逸舱口。

代码语言:javascript
复制
var result = customers
            .Where(new TermRangeQuery("CompanyName", "A", "C", includeLower: true, includeUpper: true))
            .ToList();

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

代码语言:javascript
复制
var result = customers
            .Where(c => (c.AnyField() == "amber").Fuzzy(1.0f))
            .ToList();

它支持与==!=的简单匹配。

代码语言:javascript
复制
var result = customers
            .Where(c => c.CustomerId != "Jason")
            .ToList();

请注意,==的含义由给定字段的索引方式控制。如果字段被索引为关键字,则完全匹配生效。如果字段被标记化、词干化、转换为小写等,那么==将匹配该字段中的任何术语。

票数 11
EN

Stack Overflow用户

发布于 2015-03-31 14:55:27

使用此代码:

代码语言:javascript
复制
var directory = FSDirectory.Open(AppDomain.CurrentDomain.BaseDirectory + "/index/recipes");

using(var provider = new LuceneDataProvider(directory, Lucene.Net.Util.Version.LUCENE_30)) {
    using(var session = provider.OpenSession < CatalogItemDocument > ()) {}

}

您可以使用文件系统而不是系统内存。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25300203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档