在 .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 中使用哪些好的倒排索引库?的主要内容,如果未能解决你的问题,请参考以下文章
推荐系统[九]项目技术细节讲解z1:Elasticsearch 如何进行快速检索(ES倒排索引和分词原理)以及倒排索引在召回中的应用。