在 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
。
我正在使用 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
。