在 .NET 中使用哪些好的倒排索引库?

Posted

技术标签:

【中文标题】在 .NET 中使用哪些好的倒排索引库?【英文标题】:What are good inverted-index libraries to use in .NET? 【发布时间】:2013-02-06 02:56:00 【问题描述】:

我有一个 .NET 桌面应用程序,我需要在其中搜索大型数据集。每个数据集大约有 100000 个项目,包含 10 个字段。字段的类型是字符串、日期时间、int、float 和自定义项类型。可以有大约 5 个并发数据集,但搜索只在一个数据集内。

搜索类型是

全文支持通配符 搜索特定字段 日期范围

我正在考虑以下替代方案:

    Lucene.NET。但是移植和维护似乎是一项巨大的工作,因此 Solr 满足服务器需求,我对 Lucene.NET 的未来感到担忧。您对 Lucene.NET 的未来发展有何看法? 在桌面上使用 Solr 作为单独的进程。 是否有替代基于 Lucene 的解决方案? 创建我自己的。有一些参考/教程吗?好消息是,我不需要复杂的文本分析或任何评分/刻面功能。只需搜索一个术语(可选通配符)并返回一个项目列表。

【问题讨论】:

100k 项并不多。标准 SQL 数据库和全表扫描作为搜索算法呢? 仅供参考:这通常称为倒排索引,而不是倒排索引。 谢谢大家。 @usr:您的评论让我思考并搜索了 SQL 选项。 SQLite 有一个全文模块。 SQL Server Express 也是如此。所以,我将与 Solr 选项一起制作一个 this 的原型。 【参考方案1】:

使用 Solr (4.1) 和 SolrNet。您需要从源代码编译最新的 SolrNet 以允许它连接到 Solr 4+(这很容易)。

包含 10 个字段的 10 万个文档是您可以使用 Solr 在您的个人计算机上进行原型制作而不会费力的事情。

最困难的部分是“自定义”项目。您需要弄清楚要搜索它们的内容并将它们转换为 Solr 可识别的格式之一。

关于其他点:

1) Lucene.Net 落后于最新的可能,从 .Net 与 Solr 的集成非常容易

3) 我认为 Lucene/Solr/ElasticSearch 在开源领域处于领先地位,甚至正在扼杀专有解决方案

4) 不要!只是不要。你会想要一个接一个地添加一个功能(地理?),并且只是重新发明***。

【讨论】:

【参考方案2】:

我最近发现了一家名为FlexSearch 的公司,该公司似乎直接通过 IKVM 使用 Lucene。他们已经在http://github.com/flexsearch/flexlucene 开源了他们的构建脚本,并且发布了当前的 NuGet 包。

我现在正处于从 Lucene.NET 迁移到 FlexLucene 的过程中,但到目前为止,它看起来很简单,并且让我可以了解一些似乎保持最新的东西。

【讨论】:

效果如何?如果您能分享您使用 FlexLucene 的经验,那就太好了!

以上是关于在 .NET 中使用哪些好的倒排索引库?的主要内容,如果未能解决你的问题,请参考以下文章

图像检索中的倒排索引

Lucene 是如何组织和遍历倒排索引的?

推荐系统[九]项目技术细节讲解z1:Elasticsearch 如何进行快速检索(ES倒排索引和分词原理)以及倒排索引在召回中的应用。

正排索引与倒排索引(转)

elasticsearch 的倒排索引是什么 ?

搜索引擎基础概念—— 倒排列表