在rails中,我使用searchkick
gem进行搜索。当我为where子句添加更多字段时,返回零结果。
实际上搜索正在使用以下方法(User.rb),
searchkick word_start: [:name]
def initialize(name, limit = User::SUGGESTION_LIMIT, page = nil)
@name = name
@limit = limit
@page = page
@per_page = limit.to_i
end
query = {
match: :word_start,
fields: [{ emails: "exact" }, "name^5"],
misspellings: { prefix_length: 2 },
load: false
}
User.search(name, query).records
当我添加像where: {active: false, inactive: true, deleted_at: nil}
这样的条件时,它不返回任何数据。
query = {
match: :word_start,
where: {active: false, inactive: true, deleted_at: nil},
fields: [{ emails: "exact"}, "name^5"],
misspellings: { prefix_length: 2 },
load: false
}
以上where
条件有任何错误吗?请帮我解决这个问题。我是第一次使用这个宝石。
实际上,where
子句中使用的字段的索引方式不同。您必须将这些字段定义为filterable
:
searchkick word_start: [:name], filterable: [:active, :inactive, :deleted_at]
这应该工作。
顺便说一句:您不需要“活动”和“非活动”属性。如果“active”属性为false,则表示它处于非活动状态。