【问题标题】:Use one Solr instance for two Rails apps为两个 Rails 应用使用一个 Solr 实例
【发布时间】:2015-02-25 14:46:26
【问题描述】:

我的服务器设置了几个 Rails 应用程序,其中两个使用 Solr Sunspot。但是,对于给定的搜索,Solr 会返回不相关的结果,我认为问题归结为没有分开 Solr/Sunspot 来处理两个 Rails 应用程序。

我在一个应用程序中有这个:

class Article < ActiveRecord::Base
  searchable do
    text :title, :boost => 2.0
    text :body do
      strip_tags body
    end
    time :created_at
  end
end

这个在另一个:

class Article < ActiveRecord::Base
  searchable do
    text :title, :body
  end
end

和我的 sunspot.yml 文件基本一致:

production:
  solr:
    hostname: localhost
    port: 8983
    log_level: WARNING
    path: /solr/default
    solr_home: solr

development:
  solr:
    hostname: localhost
    port: 8982
    log_level: INFO
    path: /solr/development

test:
  solr:
    hostname: localhost
    port: 8981
    log_level: WARNING
    path: /solr/test

我的两个应用程序的 solr.xml 内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:}">
    <core name="default"     instanceDir="." dataDir="default/data"/>
    <core name="development" instanceDir="." dataDir="development/data"/>
    <core name="test"        instanceDir="." dataDir="test/data"/>
  </cores>
</solr>

有没有办法让 1 个 Solr 实例索引并为 2 个 Rails 应用程序提供结果?

我没有找到太多关于此的文档,所以对于如何执行此操作有点困惑。

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: ruby-on-rails solr sunspot


    【解决方案1】:

    我相信您正在寻找的是多核设置。默认情况下,这就是 sunspot 现在的运行方式,除了内核用于不同的 rails 环境。有关该更改,请参阅https://github.com/sunspot/sunspot/issues/115。按照该模板,我认为您需要找到一个地方来保存配置文件和数据目录,然后更新它们以列出它将运行的所有内核。 http://eemglobal.com/2014/07/setup-rails-4-with-sunspot-gem-and-solr-4-7-in-production-environment-on-ubuntu-14/ 上的这篇文章显示了另一种方法,您可以使用 solr 管理界面添加内核,然后更新配置文件以匹配。

    【讨论】:

    • 我试过这样做,但我的 solr 管理界面总是默认使用默认、开发和测试环境。太阳黑子的设计似乎并没有考虑到多个应用程序。
    • 始终默认是什么意思?在 dev rails 环境中进行本地测试我添加了另一个核心并更新了 sunspot.yml 以使用它。通过 rake 任务启动 sunspot 并访问管理界面,我看到四个核心(默认、开发、测试和我的新核心,alt)。我可以停止并重新启动,仍然可以看到相同的内核。也许您每次都通过 capistrano 进行部署并擦除/重新创建一些重要的 solr 配置文件?
    • 我认为我弄错的部分是,在两个 Rails 应用程序中,我都包含 sunspot gem,在两个 Rails 应用程序中,我都有一个 solr 目录和一个 config/sunspot.yml 文件.两个应用程序只需要一个 solr 目录和 sunspot.yml 文件吗?然后我想我可以从管理界面添加核心,但我需要指定源来自外部应用程序。
    • 听起来您需要指定一个应用程序来运行 solr。两个应用程序都有一个 sunspot.yml,但只有一个应用程序有一个 solr.xml。为每个应用程序定义一个核心(可能是 app_name_env)。确保在 sunspot.yml 每个应用程序都指定了一个匹配的路径,例如 path:/solr/app2_production 。最后,你应该只有一个 solr 目录。
    • 每次我重新启动服务器时,Sunspot 都会默认使用三个内核。我认为这可能是因为在 solr.xml 中,它有这个条目:&lt;solr persistent="false"&gt; 所以每次我停止并启动 sunspot 时,我刚刚在管理 ui 中创建的核心消失了,我总是以默认、开发、测试结束。我应该只编辑 solr.xml 文件还是应该从管理界面添加内核?老实说,这是一个糟糕的设计,我不明白为什么我的问题被否决了,它不应该这么难。
    猜你喜欢
    • 2017-11-27
    • 2011-03-04
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多