簡體   English   中英

使用 Rails 進行全文搜索

[英]Full Text Searching with Rails

我一直在尋找 Rails 的插件/gems。 大多數文章將 Ferret (Lucene) 與 Ultrasphinx 或 Thinking Sphinx 進行比較,但沒有一篇文章討論SearchLogic 有沒有人知道這個比較的線索? 您使用什么,它的性能如何?

  • thinking_sphinx 和 sphinx 工作得很好,沒有索引、查詢、安裝問題(5 或 6 個安裝,包括生產 slicehost )

  • 為什么不是每個人都使用 sphinx,比如 craigslist? 在這里閱讀它的局限性(一年半以前的文章。sphinx 開發人員 Aksyonoff 正在研究這些,他正在以驚人的速度添加功能和可靠性並消除錯誤)

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

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

全文搜索引擎比較——Lucene、Sphinx、Postgresql、MySQL?

  • ferret:易於安裝,不能正確阻止,索引速度非常慢(一個 mysql 數據庫:sphinx:3 秒,ferret:50 分鍾)。 在負載下生產中的 drb 服務器中有據可查的問題(索引損壞)。 話雖如此,自從 acts-as_ferret 3 年前問世以來,我就在開發中使用它,它對我很有幫助。 在某些情況下,不堅持波特詞干提取是一種優勢。

  • Lucene 和 Solr 是開源搜索的大猩猩/馬克卡車/重量級冠軍。 這些團隊在solr 14 版本中做了很多令人印象深刻的新功能:

  • acts-as-solr:一旦 tomcat 或 jetty 到位,效果很好,但有時會很痛苦。 mattmatt 的 AAS 分支是主要分支,但該項目相對沒有維護。

  • 重新安裝 tomcat:SOLR/lucene 無疑是我見過的所有軟件包中最好的知識庫/支持搜索引擎(我想我並不感到驚訝),這里的搜索框:

http://www.lucidimagination.com/

  • Sunspot 新的紅寶石包裝器,建立在 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/

首先,我明顯的偏見:我創建並維護了 Thinking Sphinx。

碰巧的是,昨晚我實際上看到 Ben Johnson(SearchLogic 的創建者)出席了紐約市紅寶石會議。 SearchLogic 僅適用於 SQL - 因此,如果您不處理大量表格,並且不需要相關性排名,那么它可能正是您正在尋找的。 語法也很干凈。

但是,如果您希望所有查詢智能都由不屬於您自己的代碼處理,那么 Sphinx 或 Solr(我認為它是底層的 Lucene)可能會更好。

SearchLogic 是一個很好的插件,但實際上是為了讓您的搜索代碼更具可讀性,它不提供 Sphinx 提供的自動索引。 我沒用過 Ferret,但是 Sphinx 非常強大。

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

很好的介紹,看看它有多靈活。

我沒有使用過 SearchLogic,但我可以告訴你 Lucene 是一個非常成熟的項目,有多種語言的實現。 它快速靈活,API 使用起來很有趣。 這是一個不錯的選擇。

鑒於這個問題在谷歌的全文搜索中仍然排名很高,我真的想說,如果你有興趣為你的 Rails 應用程序添加全文搜索功能(並且希望 Solr 落后), Sunspot今天更強大你為此)。 您可以在此處查看有關此內容的完整教程。

就在我們這樣做的時候,另一個進入該領域的競爭者是ElasticSearch ,它旨在成為一個構建在 Lucene 之上的實時全文搜索引擎(但與 Solr 相比做事不同)。 ElasticSearch 包括開箱即用的分片和到多個節點的復制、更快的實時搜索、“過濾器”以允許您在符合您的條件的內容可用時接收通知,並且它的移動速度非常快,還有許多其他功能。 在它之上構建東西很容易,因為 API 非常簡單並且完全基於使用 JSON 作為格式的 REST。 可以說您甚至不需要插件即可使用它。

就個人而言,我不為 Web 應用程序的數據庫不可知論而煩惱,並且非常高興使用 pg83 中的全文搜索。 好處是,如果以及當您更改框架/語言時,您仍然可以進行全文搜索。

對於任何尋找沒有任何依賴的簡單搜索 gem 的人,請查看acts_as_indexed

全文索引和MATCH() AGAINST()

如果您只想對表中的幾個文本列進行快速搜索,您可以簡單地使用這些列的全文索引並在查詢中使用MATCH() AGAINST()

  1. 在遷移文件中創建全文索引:

     add_index:table, :column, type: :fulltext
  2. 使用該索引查詢:

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

ElasticSearchSearchkick

如果您正在尋找一個完整的搜索索引解決方案,它允許您搜索任何記錄中的任何列,同時仍然非常快速,請查看ElasticSearchSearchkick

ElasticSearch是索引和搜索引擎。

Searchkick是與 Rails 集成的庫,可以非常輕松地為您的記錄編制索引並進行搜索。

Searchkick 的自述文件在解釋如何啟動和運行以及微調您的設置方面做得非常出色,但這里有一個小片段:

  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" )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM