使用Rails进行全文搜索

问题描述 投票:29回答:8

我一直在寻找Rails的插件/宝石。大多数文章都将雪貂(Lucene)与Ultrasphinx或Thinking Sphinx进行了比较,但没有一篇谈论SearchLogic。有人对它的比较有任何线索吗?您使用什么,以及如何执行?

ruby-on-rails full-text-search lucene sphinx searchlogic
8个回答
27
投票
  • thinking_sphinx和sphinx可以正常工作,没有索引,查询,安装问题(5或6个安装,包括生产slicehost)

  • 为什么每个人都不使用狮身人面像,例如craigslist?在此处阅读有关其局限性的文章(已有一年半的历史。狮身人面像开发人员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?

  • 雪貂:易于安装,无法正常使用,索引速度非常慢(一个mysql数据库:sphinx:3秒,雪貂:50分钟)。在负载下生产中的drb服务器中有据可查的问题(索引损​​坏)。话虽如此,自3年前acts-as_ferret出现以来,我就在develometn中使用了它,它为我提供了很好的帮助。在某些情况下,不坚持搬运波特是一个优势。

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

  • 中做了许多令人印象深刻的新功能
  • sols-as-solr:一旦安装了雄猫或码头,效果很好,但有时会很痛苦。 A-A-S fork by mattmatt是主分支,但是该项目相对来说没有维护。

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

http://www.lucidimagination.com/

  • Sunspot the new红宝石包装纸,基于solr-ruby。看起来很有希望,但我无法在OSX上安装它。索引所有红宝石对象,不仅通过AR为数据库建立索引

  • 真正具有启发性的一件事是安装2个搜索插件,例如狮身人面像和SOLR,狮身人面像和雪貂,看看它们返回的结果不同。就像@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/


18
投票

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

碰巧的是,我实际上看到昨晚在纽约红宝石大会上出席的本·约翰逊(SearchLogic的创建者)出席了会议。 SearchLogic仅用于SQL-因此,如果您不处理大量表,并且不需要相关性排名,那么它可能正是您所要查找的。语法也很干净。

但是,如果您希望所有的查询智能都由非您自己的代码处理,那么Sphinx或Solr(我想是Lucene,可能会更好)。


5
投票

SearchLogic是一个很好的插件,但实际上是为了使您的搜索代码更具可读性,它没有Sphinx所提供的自动索引。我没有使用过雪貂,但是Sphinx的功能非常强大。

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

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


3
投票

我还没有使用SearchLogic,但是我可以告诉你Lucene是一个非常成熟的项目,已经用多种语言实现了。它既快速又灵活,并且使用API​​十分有趣。这是一个很好的选择。


3
投票

鉴于此问题在全文搜索中在Google上仍然排名很高,如果您有兴趣向Rails应用程序添加全文搜索功能,Sunspot今天要更加强大。为此让Solr身后)。您可以在此here上查看完整的教程。

[而我们正在研究时,另一个到达该领域的竞争者是ElasticSearch,其目标是成为基于Lucene的实时全文本搜索引擎(但与Solr相比,其工作方式有所不同)。 ElasticSearch包括开箱即用的分片和复制到多个节点,更快的实时搜索,“ percolators”,使您可以在符合条件的东西可用时接收通知,并且随着其他更多功能的发展,它确实可以快速移动。由于API非常简单,并且完全基于使用JSON作为格式的REST,因此很容易在其上构建内容。可能会说您甚至不需要插件即可使用。


1
投票

就个人而言,我不会为Web应用程序使用数据库不可知论,并且对使用pg83中的全文本搜索感到非常满意。好处是,如果以及当您更改框架/语言时,仍然可以进行全文搜索。


0
投票

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


0
投票

全文索引和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在解释如何启动和运行以及微调您的设置方面做得非常出色,但这是一个小片段:

  1. 安装并启动ElasticSearch。

    brew install elasticsearch
    brew services start elasticsearch
    
  2. searchkick宝石添加到捆绑包中:

    bundle add searchkick --strict
    

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

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

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

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

    matching_records = MyModel.search( "term" )
    
© www.soinside.com 2019 - 2024. All rights reserved.