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

时间:2011-03-02 21:57:57

标签: mysql ruby-on-rails postgresql heroku

我正在计划一个将在Heroku上托管的Rails应用程序,并且需要地理空间和全文搜索功能。

我知道Heroku提供了WebSolrIndexTank这样的附加组件,听起来像是可以完成这项工作,但我想知道这是否可以在MySQL和/或PostgreSQL中完成,而不必支付任何附加费?

5 个答案:

答案 0 :(得分:3)

根据应用程序的规模,您应该能够轻松地在MySQL中完成FULLTEXT和SPATIAL索引。一旦您的应用程序变得庞大,即数以亿计的行具有高并发性和每秒数千个请求的倍数,您可能需要转移到另一个FULLTEXT或SPATIAL查询的解决方案。但是,我不建议尽早进行优化,因为它可能很难正确完成。在可预见的未来,MySQL应该足够了。

您可以阅读MySQL here中的空间索引。您可以在MySQL here中阅读有关全文索引的内容。最后,我建议采用概述here的步骤,使schema.rb文件和rake任务适用于这两种索引类型。

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

答案 1 :(得分:3)

如果您在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);可以轻松地与全文搜索一起使用...任何文本字段都可以使用,并且它可以与常规属性(在这种情况下的价格,数量)相关联。

答案 2 :(得分:2)

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

内置地理搜索:http://freelancing-god.github.com/ts/en/geosearching.html

编辑:

Sphynx几乎已经为heroku做好准备了,请看这里:http://flying-sphinx.com/

答案 3 :(得分:0)

IndexTank现在可以在Heroku上免费获得100k文档,我们还没有更新文档。这可能不足以满足您的需求,但我想我会告诉您以防万一。

答案 4 :(得分:0)

通过Postgre进行全文搜索我建议pg_search,我现在正在heroku上使用它。我没有使用过texticle但是从我看到的内容来看,pg_search最近有更多的开发活动,并且它是基于texticle建立的(它不会为你添加索引,你必须自己做)。

我现在找不到该主题,但我看到Heroku为pg geo搜索提供了选项,但它处于测试阶段。

我的建议是,如果您无法找到postgre解决方案是托管您自己的SOLR实例(在EC2实例上)并使用sunspot solr gem将其与rails集成。

我已经实现了自己的解决方案并使用了WebSolr。基本上这就是他们给你自己的SOLR实例无忧无虑。在我看来是不值得的钱。对于使用太阳黑子solr客户端的集成,所以你只需支付20 $ / 40 $ / ...来为你托管SOLR。我知道你也得到备份,维护等但是打电话给我便宜我更喜欢我自己的实例。此外,WebSolr还锁定在SOLR的1.4.x版本上。