【发布时间】:2011-05-25 13:32:08
【问题描述】:
我正在开发一个目前流量最少的网站。它使用 Ruby on Rails 构建并在 Heroku 的云平台上运行。
作为网站的一部分,我有大量需要搜索的页面,每个页面上只有少量信息。考虑一个文章表,其中每篇文章只需要索引其标题,但大约有 800 万篇文章。
Postgres 搜索: 当我第一次开始研究这个时,我运行了 Postgres 全文搜索,但显然它没有优化到足以让搜索处理这么多索引项目,并且运行速度很慢。我有一些搜索导致数据库连接超时并且需要 30 多秒才能完成。
Websolr: 然后,我开始使用 OneMoreCloud 的 Websolr,它是当时唯一一个用于云搜索的 Heroku 插件。不幸的是,他们按索引项目的数量收费,这对于像我这样没有流量但有大量要索引的项目的网站来说是可怕的,而且我的性能可以说比 Postgres 搜索更差,后者是免费的。在 Postgres 搜索超时并关闭网站的情况下,Websolr 会返回空的或部分结果集,使查看者认为结果不在数据库中。
索引罐: 现在 Heroku 添加了另一个云搜索提供商 Index Tank,它仍处于测试阶段。虽然它的测试版是免费的,但我不愿意尝试它们,因为他们的非 Heroku 服务不是免费的,他们的最高计划只有 200 万份文档,而每月的成本已经高达 500 美元。
Google 网站搜索: 我目前正在考虑的一个选项是迁移到 Google Site Search。 Google 搜索品牌让我有信心不会遇到过去的性能问题。此外,它们的定价非常合理,并且是按流量定价的。但是,不利的一面是,它并不是真正的集成搜索,因为它不会连接到数据库中,而只会查看网页,因此据我所知,无法指定仅返回文章的搜索在技术文章类别或类似的类别中。即使自定义搜索结果的外观似乎也很痛苦,因为我必须用 XML 解析搜索结果,然后使用它来生成我的搜索结果页面,如果我想使用元数据进行自定义在显示中,我必须使用解析的搜索结果在我的数据库中查找所有结果的行。
您是否可以向 Stackoverflow 社区推荐云或第 3 方搜索提供商的任何好的选择?
【问题讨论】:
-
为什么不使用自己的索引,例如 Lucene?您可以根据字段(例如标题、内容)准确地索引您想要的内容,并且很容易设置。有各种 Ruby 端口和/或接口,请参阅这个问题:stackoverflow.com/questions/1318604/ruby-alternative-for-lucene
-
@Richard 如果最坏的情况发生,我会这样做,但我真的很想避免它。在 Lucene 上运行我自己的索引需要设置一个服务器,而现在我不需要管理自己的服务器。此外,当在我的本地系统上运行 Solr/Lucene 来测试 Websolr 时,它给了我很多我想避免的配置问题,比如内存不足错误,即使我有足够的内存。
-
@Richard:Lucene 可能很容易上手,但要优化它需要做很多工作。我不会轻易迈出这一步。
标签: search full-text-search cloud