【问题标题】:What is best and most active open source .Net search technology?什么是最好和最活跃的开源 .Net 搜索技术?
【发布时间】:2010-11-18 11:35:26
【问题描述】:

我正在尝试为 .Net 项目确定一种开源搜索/索引技术。似乎 Java 项目的标准是 Lucene,但就 .Net 而言,Lucene.Net 项目似乎相当不活跃。这仍然是最好的选择吗?还是有其他可行的替代方案?

【问题讨论】:

  • +1:我对这个很感兴趣。我尝试使用 SQL Server 的全文索引处理器。它适用于搜索 pdf、doc 等二进制文件;但是在搜索常规列时它很慢。在我看来,搜索 7000 行表的 6 秒是不可接受的。现在我只使用 LIKE 'value%' 简单的搜索,它返回的速度非常快。

标签: .net search lucene lucene.net


【解决方案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 文章非常活跃,对问题的回复也很快。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-12-23
              • 1970-01-01
              • 2012-02-24
              • 2010-12-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多