什么是最好和最活跃的开源 .Net 搜索技术?
Posted
技术标签:
【中文标题】什么是最好和最活跃的开源 .Net 搜索技术?【英文标题】:What is best and most active open source .Net search technology? 【发布时间】:2010-11-18 11:35:26 【问题描述】:我正在尝试为 .Net 项目确定一种开源搜索/索引技术。似乎 Java 项目的标准是 Lucene,但就 .Net 而言,Lucene.Net 项目似乎相当不活跃。这仍然是最好的选择吗?还是有其他可行的替代方案?
【问题讨论】:
+1:我对这个很感兴趣。我尝试使用 SQL Server 的全文索引处理器。它适用于搜索 pdf、doc 等二进制文件;但是在搜索常规列时它很慢。在我看来,搜索 7000 行表的 6 秒是不可接受的。现在我只使用 LIKE 'value%' 简单的搜索,它返回的速度非常快。 【参考方案1】:我曾经使用 DotLucene,但遇到了一些问题。一个重要的事实是它需要完全信任才能运行。
我已经开始使用 SearchAroo:http://www.searcharoo.net/
它使用 XML 数据存储,我发现它的性能与 dot lucene 非常相似。
如果您正在寻找其他选择,我一定会看看。
【讨论】:
【参考方案2】:在几个项目中使用了 Lucene.Net 之后,我还想补充一下将 Java 版本的 lucene 编译成 .net 代码的建议,IKVM.NET。它工作得非常好,而且您永远不必担心 Java 版本过时。您还可以选择编译所有额外的库并使用它们(我在一个项目中使用 GIS 搜索内容)。
【讨论】:
您是否想过为此创建一个 codeplex 项目?也许设置一个定期构建 +1 对于这个明显但容易被忽视的选项,鉴于 Lucene.NET,我自己还没有考虑过这个;您是否遇到过任何可能使非 Java 商店难以做到这一点的障碍,或者您是否有将 IKVM 用于一个听起来很顺利的项目的经验? @Mikos - 好主意;如果这对于 Lucene 大小的项目是可行的,那么它可能是这种方法的一个很好的优先级 - 或者这种方法已经很普遍而且我刚刚错过了? @Steffen - 真的就是这么简单。我遇到的唯一问题是 lucene 的新版本 (3.0.2) 使用了当前版本的 IKVM JVM 中不可用的类。我最终使用 SimpleFSLockFactory 而不是 NativeFSLockFactory。【参考方案3】:SQLite 有 FTS3(全文搜索 3),可以做你想做的事。我没有直接的经验,但我相信它是明确开发的,可以做 Lucene 所做的事情,至少在简单的情况下是这样。我不相信您可以更改标记器或任何东西(无论如何都无需修改源代码),但这是一种选择。
【讨论】:
我们在我们的产品中使用 SQLite FTS,对于我们的特定情况,它非常好,比 Lucene.NET 快得多。【参考方案4】:Lucene.net 是在 nHibernate 中实现的,因此如果您也在寻找 O/R 映射器,那么这种组合可能值得深入研究。
我们目前正在开发一个原型,并在几分钟内完成了 Lucene 的配置(我们使用 fluent nhibernate)。
【讨论】:
我也在尝试 nHibernate。感谢您的信息。【参考方案5】:如果你不是真的坚持使用 .Net,你可以试试 Sphinx。开源并适用于所有平台(Windows / Linux)。
【讨论】:
【参考方案6】:虽然它们在相当长的一段时间内都不是 Lucene.Net 的“完整”版本(即完整的文档、网站更新),但仍有新的提交到其 SVN 存储库。 例如,最新版本 (2.3.2) 标记在 07/24/09 (see here)。 由于开发仍在进行中,我会将其用于新的全文搜索项目。
【讨论】:
我有点想这将是答案。 Lucene.Net 就是这样。谢谢大家!【参考方案7】:据我了解,您需要在现有数据库上“仅”建立一个全文索引,SQL Server 全文搜索原则上对您有用,但您当前的实施/设置太慢了。
如果我是你,我不会采用完全不同的方法(只需想想保持外部索引与数据库同步的混乱情况,或者加入来自两者的查询结果等)。尝试解决 SQL Server 的性能问题,因为没有人会认真地认为搜索 7k 行的 6 秒是企业级解决方案的最终决定,该解决方案用于一些最大的数据库......也许尝试提出一个新问题关于此功能的常见缺陷(我不是这方面的专家),您最终可能会得到一个简单的修复,而不是完全重建您的搜索架构;)
【讨论】:
【参考方案8】:我知道这不是开源的,但它是 Microsoft 提供的免费且非常全面的产品:
Microsoft Search Server 2008 Express
开箱即用的相关性。
本地化界面。
可扩展的搜索体验。
没有预设文件限制。
连续传播索引。
开箱即用的索引连接器
内容摘要。
点击突出显示。
最佳选择和定义。
查询更正。
重复折叠。
按属性过滤。
按语言过滤。
按日期排序。
电子邮件/RSS 提醒
【讨论】:
但是,如果您要将其用于搜索索引,则很容易达到 DB 大小限制。它也不是主要为文本索引而设计的,虽然文本索引可能有效,但与 lucene 之类的东西相比,它的性能相当差。 有趣 - 我不知道 MS 做了这样的产品。【参考方案9】:虽然它不是 .net,但我建议使用 Solr 作为它基于 lucene 构建的,并且鉴于它返回 XML/HTTP 和 JSON 的事实,它易于集成
【讨论】:
【参考方案10】:lucene.net 必然会落后于 java,因为它是一个端口。我也不喜欢 lucene 端口是直接副本的方式,尽管它确实使我认为的文档更容易。如果您不需要超紧密(二进制)集成,则需要考虑使用Solr。我以前使用过它并取得了很好的成功。它仍然由 Lucene 提供支持,但我认为它更好,因为它具有一些更好的功能。您可以通过 HTTP 端点从 .net 使用它。
要问自己的一个问题是您在搜索解决方案中真正需要/想要什么。实现搜索的方法有很多种,但并非所有解决方案都适用于所有情况。
【讨论】:
【参考方案11】:看看www.searcharoo.net。它有一个爬虫,以及诸如工作干、索引办公文档/PDF 之类的功能。作者对 codeproject 文章非常活跃,对问题的回复也很快。
【讨论】:
以上是关于什么是最好和最活跃的开源 .Net 搜索技术?的主要内容,如果未能解决你的问题,请参考以下文章