繁体   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