3

在本地,轮胎和弹性搜索工作。然而,轮胎似乎与 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}"  

我很想在这里得到任何帮助。

4

0 回答 0