在 Rails 4 中优化 Searchkick

Optimizing Searchkick in Rails 4

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

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

  searchkick word_start: [:realname]
end

这很好用,但它不必要地为每一列编制索引。我希望它仅索引 "realname" 列。

然后我在 Searchkick GitHub 页面中看到了 search_data。这允许我只索引某些列:

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

我如何将这两者结合起来?因此只有 1 列是用 realname 和 word_start?

索引的

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

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