在本地,轮胎和弹性搜索工作。然而,轮胎似乎与 Heroku 上的 Bonsai 配合得并不好。
索引构建正确,但是,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 应用程序没有运气使用轮胎来做到这一点。
以下是我的控制器操作:
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}"
我很想在这里得到任何帮助。