0

我正在使用 ES 和 Searchkick gem 来处理我的 Rails 应用程序中的搜索。我目前正在做:

class Paper < ActiveRecord::Base
  belongs_to :report
  belongs_to :user
  before_destroy :delete_dependant_papers

  searchkick word_start: [:realname]
end

这很好用,但它不必要地索引每一列。我希望它只索引“实名”列。

然后我search_dataSearchkick GitHub页面中遇到了。这允许我只索引某些列:

class Product < ActiveRecord::Base  
def search_data
    as_json only: [:name, :active]
    # or equivalently
    {
      name: name,
      active: active
    }
  end
end

我将如何将这两者结合起来?所以只有 1 列被 realname 和 word_start 索引?

4

1 回答 1

0

search_data方法将让您索引realname,并word_start让您部分匹配您的数据。所以你的模型需要看起来像这样:

class Paper < ActiveRecord::Base
  belongs_to :report
  belongs_to :user
  before_destroy :delete_dependant_papers

  searchkick word_start: [:realname]

  def search_data
    as_json only: [:realname]
  end
end

Paper.reindex更改search_data方法后,您需要在控制台中调用。

于 2015-03-19T09:24:27.690 回答