簡體   English   中英

在Heroku上托管的Rails應用程序的地理空間和全文搜索

[英]Geospatial and full text search for Rails app hosted on Heroku

我正在計划一個將在Heroku上托管的Rails應用程序,並且需要地理空間和全文搜索功能。

我知道Heroku提供了像WebSolrIndexTank這樣的附加組件,聽起來他們可以完成這項工作,但我想知道這是否可以在MySQL和/或PostgreSQL中完成而無需為任何附加組件付費?

根據應用程序的規模,您應該能夠輕松地在MySQL中完成FULLTEXT和SPATIAL索引。 一旦您的應用程序變得龐大,即數以億計的行具有高並發性和每秒數千個請求的倍數,您可能需要轉移到另一個FULLTEXT或SPATIAL查詢的解決方案。 但是,我不建議盡早進行優化,因為它可能很難正確完成。 在可預見的未來,MySQL應該足夠了。

您可以在此處閱讀MySQL中的空間索引。 你可以在這里閱讀MySQL中的全文索引。 最后,我建議采取此處概述的步驟,使schema.rb文件和rake任務適用於這兩種索引類型。

我只使用了MySQL,但我的理解是PostgreSQL也有一個很好的地理空間索引解決方案。

如果你在Heroku有一個數據庫,你可以使用Postgres對全文搜索的支持: http//www.postgresql.org/docs/8.3/static/textsearch.html Heroku運行的最早的服務器(對於共享數據庫)是8.3和8.4。 最新的是9.0。

可以在這里看到一篇博文,注意到這個小事實: https//tenderlovemaking.com/2009/10/17/full-text-search-on-heroku.html

顯然,那個“texticle”(嘿。可愛。)插件很有效。 根據我的理解,它甚至會為您創建正確的索引。

這是基本的故事:postgres全文搜索非常快速且沒有大驚小怪(雖然Rails集成可能不是很好),雖然它沒有提供Solr或IndexTank的花里胡哨。 請務必閱讀有關如何正確設置GIN和/或GiST索引以及使用tsvector / tsquery類型的信息。

簡短版本:

  • 創建一個(在這種情況下,基於表達式)索引: CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', body)); 在這種情況下,“body”是被索引的字段。
  • 使用@@運算符: SELECT * FROM ... WHERE to_tsvector('english', pgweb.body) @@ to_tsquery('hello & world') LIMIT 30

困難的部分可能是將事物映射回應用領域,之前引用的博客文章試圖這樣做。

專用數據庫也可以使用PostGIS進行申請,PostGIS是一個功能強大且功能齊全的系統,用於索引和查詢地理數據。 OpenStreetMap廣泛使用PostgreSQL幾何類型(內置),很多人將它與PostGIS結合起來,效果很好。

這兩種方法(全文搜索,PostGIS)都利用Postgres中的可擴展數據類型和索引基礎結構,因此您應該期望它們能夠為許多記錄提供高性能(如果事情看起來花一點時間仔細查看情況破獲)。 您還可以利用這一事實,即您可以將這些功能與事務和結構化數據結合使用。 例如:

CREATE TABLE products (pk bigserial, price numeric, quantity integer, description text); 可以很容易地與全文搜索一起使用...任何文本字段都可以,並且它可以與常規屬性(在這種情況下的價格,數量)相關聯。

我會使用思考sphinx,一個也可以在heroku上部署的全文搜索引擎。

它內置了地理搜索功能: http//freelancing-god.github.com/ts/en/geosearching.html

編輯:

Sphynx幾乎已經為heroku做好准備了,請看這里: http//flying-sphinx.com/

對於通過Postgre的全文搜索我推薦pg_search ,我現在正在heroku上使用它。 我沒有使用過texticle但是從我能看到的內容來看,pg_search最近有更多的開發活動,並且它是基於texticle構建的(它不會為你添加索引,你必須自己做)。

我現在找不到該主題,但我看到Heroku為pg geo搜索提供了選項,但它處於測試階段。

我的建議是,如果你無法找到postgre解決方案是托管你自己的SOLR實例(在EC2實例上)並使用太陽黑子solr gem將它與rails集成。

我已經實現了自己的解決方案並使用了WebSolr 基本上這就是他們給你自己的SOLR實例無憂無慮。 在我看來是不值得的錢。 對於使用太陽黑子solr客戶端的集成,所以你只需支付20 $ / 40 $ / ...來為你托管SOLR。 我知道你也得到備份,維護等但是打電話給我便宜我更喜歡我自己的實例。 此外,WebSolr還鎖定在SOLR的1.4.x版本上。

IndexTank現在可以在Heroku上免費獲得100k文檔,我們還沒有更新文檔。 這可能不足以滿足您的需求,但我想我會告訴您以防萬一。

暫無
暫無

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

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