我们在开发模式下使用 sunspot 的 Solr gem 有一段时间了。现在需要将该应用程序移至生产环境。
使用捆绑的 sunspot gem 在生产环境中设置 solr 有什么缺点吗?
我通常喜欢 tomcat + solr 的想法,但设置起来更复杂。
Sunspot 捆绑 gem 很容易。假设我们在 3 个阶段(暂存、生产、QA)有 1 个 Rails 项目,2 个应用程序服务器和一个 db/solr 服务器必须:
- 将 rails 项目推送到数据库服务器
- 使用 bundle exec rake sunspot:solr:start for 在生产环境中的数据库服务器上启动 solr(我们只是为每个 solr 实例使用不同的端口)
- 用 rake sunspot:solr:reindex 重建索引
- 为应用服务器修改 sunspot.yml 以使其连接到特定阶段端口上的数据库服务器
以上适用于生产/暂存 solrs 的 X 个实例。
Tomcat6 + Sunspot 不是那么容易和时间/结果有效。据我了解(修复我)必须:
- 在数据库服务器上安装和维护tomcat
- 假设我们想要 3 个 solr 实例 - 部署 3 个带有单独 solr 的 solr war(或者使用很难设置的多核 solr)
- 将 Rails 项目部署到数据库服务器上
- 每次我们更改架构/配置/rails 中的任何内容时 - 我们必须注意生成 solr xml 和 confs 并将其复制到 tomcat webapps
- 修改 solr conf/xml 中的目录,使其指向索引文件等。
- 在每个 rails 部署上重新加载 tomcat solr 应用程序实例,其中包括一些脚本和“非 rails”部署过程方法:)
我最近做了类似的事情,不得不回答同样的问题。我的问题空间看起来像有两种语言(所以最好是两个核心,将来可能更多用于其他搜索选项),必须在多个表和搜索/计数方面索引数据,部分在产品组和分层标签等层次结构中 car_brand/型号/类型/build_year。
据我所知,如果您拥有相对“平坦”的数据,太阳黑子效果最好(仅),充其量只需为单个模型定义要使用的字段。当您需要将多个模型组合到单个分面文档中时,这就变得困难了。 (但由于我没有使用 Sunspot,所以我无法确定)。您可以(并且应该)仍然使用 rsolr gem 与 Solr 进行通信。但是,如果您在开发中使用 Sunspot,它很可能无论如何都适合您。
有关 tomcat 的详细信息:
- 在数据库服务器上安装和维护tomcat
是的,有些工作但可以处理
- 假设我们想要 3 个 solr 实例 - 部署 3 个带有单独 solr 的 solr war(或者使用很难设置的多核 solr)
我用的是多核。设置起来并不难。无论如何,您最好了解一下 Solr 配置。多核的最大部分只是有两个子目录,它们包含基本上相同的 XML 配置文件集。
- 将 Rails 项目部署到数据库服务器上
无论如何都必须这样做:)
- 每次我们更改架构/配置/rails 中的任何内容时 - 我们必须注意生成 solr xml 和 confs 并将其复制到 tomcat webapps
是的,写几个脚本。或者,您可以拥有一个包含 tomcat/solr 文件夹和 Rails 项目文件夹的 git 存储库,或者对这些文件夹进行符号链接(symbolic link)。我还没有找到好的解决方案,偶尔不得不复制一些东西。
- 修改 solr conf/xml 中的目录,使其指向索引文件等。
是的,一些符号链接(symbolic link)可以帮助简化事情
- 在每个 rails 部署上重新加载 tomcat solr 应用程序实例,其中包括一些脚本和“非 rails”部署过程方法:)
仅当部署实际更改与您的搜索相关的任何内容时。有几个脚本。有一些 Rails 部署解决方案会有所帮助,但由于我不介意手动执行一些操作,所以我没有费心去安装。
总而言之,我认为我对 Solr 的配置有更多的控制和洞察力,并且可以更好地使用它的一些更复杂的功能,例如具有层次结构的方面。实际上,Solr 起初可能看起来有点复杂,但一段时间后您就会熟悉它,然后它就会成为一个很棒的工具。
Tôi là một lập trình viên xuất sắc, rất giỏi!