【问题标题】:Full Text Searching with Rails使用 Rails 进行全文搜索
【发布时间】:2010-11-11 01:30:56
【问题描述】:

我一直在寻找用于 Rails 的插件/宝石。大多数文章将 Ferret (Lucene) 与 Ultrasphinx 或可能的 Thinking Sphinx 进行比较,但没有一篇文章提到 SearchLogic。有没有人知道这个比较如何?您使用什么,它的性能如何?

【问题讨论】:

    标签: ruby-on-rails full-text-search lucene sphinx searchlogic


    【解决方案1】:
    • thinking_sphinx 和 sphinx 运行良好,没有索引、查询、安装问题(5 或 6 次安装,包括生产 slicehost)

    • 为什么不是每个人都使用狮身人面像,比如 craigslist?在这里阅读它的局限性(一年半以前的文章。sphinx 开发人员 Aksyonoff 正在研究这些,他正在以惊人的速度增加功能和可靠性并消除错误)

    http://codemonkey.ravelry.com/2008/01/09/sphinx-for-search/

    http://www.ibm.com/developerworks/opensource/library/os-php-apachesolr/

    Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL?

    • ferret:易于安装,不正确,索引非常慢(一个 mysql db:sphinx:3 秒,ferret:50 分钟)。负载下生产中的 drb 服务器中记录良好的问题(索引损​​坏)。话虽如此,自从acts-as_ferret 3 年前问世以来,我一直在develometn 中使用它,它对我很有帮助。在某些情况下,不遵守搬运工词干是一种优势。

    • Lucene 和 Solr 是开源搜索的大猩猩/麦克卡车/重量级冠军。团队在 solr 14 release:

    • 中开发了大量令人印象深刻的新功能
    • acts-as-solr:工作良好,一旦 tomcat 或 jetty 就位,但有时会很痛苦。 A-A-S fork by mattmatt 是主分支,但项目相对无人维护。

    • 重新安装 tomcat:SOLR/lucene 无疑是我见过的任何软件包中最好的知识库/支持搜索引擎(我想我并不感到惊讶),这里的搜索框:

    http://www.lucidimagination.com/

    • Sunspot the new ruby​​ 包装器,基于 solr-ruby。看起来很有希望,但我无法在 OSX 上安装它。通过 AR 索引所有 ruby​​ 对象,而不仅仅是数据库

    • 真正有指导意义的一件事是安装 2 个搜索插件,例如sphinx 和 SOLR、sphinx 和 ferret,看看它们返回了哪些不同的结果。就像@sphinx_results - @ferret_results

    • 一样简单

    刚刚看到这个帖子和回复

    http://zooie.wordpress.com/2009/07/06/a-comparison-of-open-source-search-engines-and-indexing-twitter/

    http://www.jroller.com/otis/entry/open_source_search_engine_benchmark

    http://www.flax.co.uk/blog/2009/07/07/xapian-compared/

    【讨论】:

      【解决方案2】:

      首先,我的明显偏见是:我创建并维护了 Thinking Sphinx。

      碰巧的是,我昨晚在纽约红宝石大会上看到 Ben Johnson(SearchLogic 的创建者)出席了会议。 SearchLogic 是纯 SQL 的——因此,如果您不处理大量表,并且不需要相关性排名,那么它可能正是您正在寻找的。语法也很简洁。

      但是,如果您希望由不属于您自己的代码处理所有查询智能,那么 Sphinx 或 Solr(我认为它是 Lucene 的底层)可能会更好。

      【讨论】:

        【解决方案3】:

        SearchLogic 是一个很好的插件,但实际上是为了让您的搜索代码更具可读性,它不提供 Sphinx 所做的自动索引。我没用过雪貂,但狮身人面像非常强大。

        http://railscasts.com/episodes/120-thinking-sphinx

        很好的介绍,看看它有多灵活。

        【讨论】:

          【解决方案4】:

          我没有使用过 SearchLogic,但我可以告诉你 Lucene 是一个非常成熟的项目,它有多种语言的实现。它快速灵活,API 使用起来很有趣。这是一个不错的选择。

          【讨论】:

            【解决方案5】:

            鉴于这个问题在 google 的全文搜索中仍然排名很高,我真的想说Sunspot 如果你有兴趣在你的 Rails 应用程序中添加全文搜索功能(并且会喜欢有 Solr 在你身后)。你可以查看这个here的完整教程。

            当我们在做的时候,另一个已经进入该领域的竞争者是ElasticSearch,它的目标是成为一个基于 Lucene 构建的实时全文搜索引擎(但与 Solr 相比做事不同) . ElasticSearch 包括开箱即用的分片和复制到多个节点、更快的实时搜索、“过滤器”,允许您在符合您的条件的内容可用时接收通知,并且它的移动速度非常快,还有更多其他功能。在它之上构建一些东西很容易,因为 API 非常简单并且完全基于使用 JSON 作为格式的 REST。可以说你甚至不需要插件就可以使用它。

            【讨论】:

              【解决方案6】:

              就个人而言,我不关心 Web 应用程序的数据库不可知论,并且很高兴使用 pg83 中的全文搜索。好处是,当您更改框架/语言时,您仍然可以进行全文搜索。

              【讨论】:

                【解决方案7】:

                对于任何寻找没有任何依赖关系的简单搜索 gem 的人,请查看 acts_as_indexed

                【讨论】:

                  【解决方案8】:

                  全文索引和MATCH() AGAINST()

                  如果您只是想对表中的几个文本列进行快速搜索,您可以简单地使用这些列的全文索引并在查询中使用 MATCH() AGAINST()

                  1. 在迁移文件中创建全文索引:

                    add_index :table, :column, type: :fulltext
                    
                  2. 使用该索引查询:

                    where( "MATCH( column ) AGAINST( ? )", term )
                    

                  ElasticSearchSearchkick

                  如果您正在寻找一个完整的搜索索引解决方案,该解决方案允许您搜索任何记录中的任何列,同时仍保持闪电般的速度,请查看ElasticSearchSearchkick

                  ElasticSearch 是索引和搜索引擎。

                  Searchkick 是与 Rails 的集成库,可让您轻松索引记录并进行搜索。

                  Searchkick's README 在解释如何启动和运行以及微调您的设置方面做得非常出色,但这里有一点 sn-p:

                  1. 安装并启动 ElasticSearch。

                    brew install elasticsearch
                    brew services start elasticsearch
                    
                  2. searchkick gem 添加到您的捆绑包中:

                    bundle add searchkick --strict
                    

                    --strict 选项只是告诉 Bundler 在您的 Gemfile 中使用准确的版本,我强烈建议这样做。

                  3. searchkick 添加到要索引的模型中:

                    class MyModel < ApplicationRecord
                      searchkick
                    end
                    
                  4. 索引您的记录。

                    MyModel.reindex
                    
                  5. 搜索您的索引。

                    matching_records = MyModel.search( "term" )
                    

                  【讨论】:

                    猜你喜欢
                    • 2012-07-29
                    • 2023-03-02
                    • 2010-11-25
                    • 2017-06-04
                    • 2013-04-23
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多