我正在计划一个将在Heroku上托管的Rails应用程序,并且需要地理空间和全文搜索功能。
我知道Heroku提供了WebSolr和IndexTank这样的附加组件,听起来像是可以完成这项工作,但我想知道这是否可以在MySQL和/或PostgreSQL中完成,而不必支付任何附加费?
答案 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版本上。