【问题标题】:solr sunpost interaction between two applicationsolr sunpost 两个应用程序之间的交互
【发布时间】:2014-01-04 16:17:32
【问题描述】:

我开发了一个带有 rails 和 solr sunspot 全文搜索的应用程序。

用户可以在这里发布主题。并且用户需要等待管理员的批准。

例如:如果用户在domain.com 中发布主题,并且批准来自admin.domain.com

@search = Post.where(status: 1).search do
      fulltext params[:search] do
        minimum_match 1
      end
      with :status, 1
      paginate page: params[:page], per_page: 15
    end
    @posts = @search.results

除非管理员批准帖子状态将为2。在管理员中,如果我从管理员将状态从 2 更改为 1,我找不到结果。我怎样才能与它互连。

我该如何处理这种问题。谁能帮忙

Edit-1

我将把它作为一个赏金问题。我在这方面面临很多困难。任何人都可以用更好的解决方案来解决这个问题吗?任何人都知道执行这种搜索的任何其他方式

【问题讨论】:

  • 这就像你的帖子对象在管理员更新后没有被索引。您是否使用 2 个应用程序:您的主应用程序和管理应用程序?
  • 是的,我有两个应用程序如何更新它

标签: ruby-on-rails ruby-on-rails-3 solr ruby-on-rails-4 sunspot-solr


【解决方案1】:

如果您有 2 个应用程序,我认为它们使用相同的数据库,但只有您的主应用程序使用 sunspot。

问题是当管理员更新一个对象时,这个对象没有在 sunspot/solr 中重新索引。

选项 1 在您的管理应用程序上添加太阳黑子,为相关模型使用相同的可搜索块,并使用相同的 solr 服务器配置。

选项 2 在您的主应用程序上创建一个自定义控制器方法(如 api)。此方法强制重新索引对象,如Sunspot.index Post.find(params[:id]) 在您的管理应用上每次更新 Post 后,您需要调用主应用的 reindex post 方法。

选项 3(最简单) 像这样在 :status 上删除您的范围:

@search = Post.where(status: 1).search do
  fulltext params[:search] do
    minimum_match 1
  end
  paginate page: params[:page], per_page: 15
end
@posts = @search.results

编辑

此更新添加了更多使用选项 1 的信息:

我用一个模型创建了一个应用程序:文章

class Article < ActiveRecord::Base
  searchable do
    text :title, :boost => 5
    text :content
    integer :status
  end
end

我想在我的管理应用上显示所有文章,并且只在我的用户应用上显示 status=1 的文章。两个应用程序使用相同的数据库和相同的 solr 服务器。

两个应用程序的配置

我使用 sunspot_rails(https://github.com/sunspot/sunspot) 和 sunspot_solr 进行此测试。

#Gemfile 
gem 'sunspot_rails'

group :development do
  gem 'sunspot_solr'
end

#config/database.yml
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

#config/sunspot.yml use same host and same port for both applications
development:
  solr:
    hostname: localhost
    port: 8982
    log_level: INFO
    path: /solr/development

注意:我使用此命令在用户应用上只启动一次 solr

bundle exec rake sunspot:solr:start

管理应用的文章控制器

我想在我的管理应用上显示所有文章,如下所示:

def index
  @search = Article.search do
    fulltext params[:search]
  end
  @articles = @search.results
end

用户应用的文章控制器

在我的用户应用中,我只想查看 statuts == 1 的文章

def index
  @search = Article.search do
    fulltext params[:search]
    with :status,1
  end
  @articles = @search.results
end

现在,当我使用我的管理应用程序时,我更新了一篇文章的状态 solr 会同时更新。 如果我在主应用上刷新文章索引页面,就会出现这篇文章。

我希望你现在有更多的信息。

【讨论】:

  • 如何为两个应用共享同一个 solr。
  • @Seting 添加您在主应用程序中使用的相同 solr gem,具有相同的配置(您的 solr 服务器的主机在您的主应用程序中指定 - 端口)并复制您的 Post 可搜索块(存在于您的main model ) 到您的 Post admin 模型中。我认为这是解决您的问题的最难方法。在尝试将相同的 solr 服务器与 2 个 rails 应用程序一起使用之前,请尝试选项 3 并删除 with :status, 1
  • @Seting 从两个应用程序访问同一个 solr 服务器没有问题,因为您通过 http 与它进行交互。
  • @Seting : 编辑我的答案,提供有关选项 1 的更多信息
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 2019-06-08
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多