如果您有 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 会同时更新。
如果我在主应用上刷新文章索引页面,就会出现这篇文章。
我希望你现在有更多的信息。