solr sunpost两个应用程序之间的交互

时间:2014-01-04 16:17:33

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

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

此处用户可以发布主题。用户需要等待管理员批准该帖子。

例如:如果用户在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。在管理员中,如果我从admin将状态从2更改为1,则无法找到结果。我怎样才能与它相互联系。

我该如何处理这类问题。任何人都可以提供帮助

修改-1

我将把这作为一个赏金问题。我面临很多困难。任何人都可以通过更好的解决方案解决这个问题,否则任何人都知道执行此类搜索的任何其他方式

1 个答案:

答案 0 :(得分:2)

如果您有2个应用程序,我认为他们使用相同的数据库,但只有您的主应用程序使用太阳黑子。

问题是当管理员更新对象时,此对象未在sunspot / solr中重新编制索引。

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

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

选项3 (最简单) 删除您的范围:状态如下:

@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

我想在我的管理应用上显示所有文章,并且只显示我的用户应用中状态为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会同时更新。 如果我在主应用程序上刷新我的文章索引页面,则会出现这篇文章。

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