本地,轮胎和弹性研究工作。然而,轮胎在Heroku上似乎与盆景不太合作。
索引构建正确,但是,Tire没有使用搜索方法访问索引。当我检查在我的模型(页面)上调用的搜索方法时,我得到以下内容:
#<Tire::Results::Collection:0x0000000659ab90 @response={"took"=>2, "timed_out"=>false, "_shards"=>{"total"=>1, "successful"=>1, "failed"=>0}, "hits"=>{"total"=>0, "max_score"=>nil, "hits"=>[]}}, @options={:load=>true, :size=>100}, @time=2, @total=0, @facets=nil, @max_score=0.0, @wrapper=Tire::Results::Item>
你可以看到,Tire没有击中索引,几乎就像它在路上迷路一样......“命中”键返回一个空数组。
我可以确认索引存在,并且已经正确构建。我能够用卷曲击中它,并成功返回搜索结果。例如:
curl -XGET 'http://my-url.bonsai.io/sampleapp-production/page/1'
这将返回“sampleapp-production”索引中的页面对象,ID为“1”。完美。
然而,我的rails app使用轮胎没有运气。
以下是我的控制器操作:
def browse
@user = current_user
if params[:category]
@category = Category.find(params[:category])
@pages = @category.pages
else
@pages = Page.search(params)
end
respond_to do |format|
format.js
format.html
end
end
以下是我的模特(页面):
include Tire::Model::Search
include Tire::Model::Callbacks
index_name BONSAI_INDEX_NAME
def self.search(params)
tire.search(load: true, page: params[:page], per_page: 100) do
query { string params[:query], default_operator: "AND" } if params[:query].present?
sort { by :created_at, "desc" } if params[:query].blank?
filter :term, :visibility => ['public']
end
end
def to_indexed_json
to_json(:include => [:user])
end
以下是我的初始化程序:
ENV['ELASTICSEARCH_URL'] = ENV['BONSAI_URL']
# Optional, but recommended: use a single index per application per environment
app_name = Rails.application.class.parent_name.underscore.dasherize
app_env = Rails.env
BONSAI_INDEX_NAME = "#{app_name}-#{app_env}"
我喜欢这里的任何帮助。