Rails - 如何在searchkick中为过滤器添加更多字段?

问题描述 投票:1回答:1

在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条件有任何错误吗?请帮我解决这个问题。我是第一次使用这个宝石。

ruby-on-rails ruby ruby-on-rails-3 elasticsearch where
1个回答
0
投票

实际上,where子句中使用的字段的索引方式不同。您必须将这些字段定义为filterable

searchkick word_start: [:name], filterable: [:active, :inactive, :deleted_at]

这应该工作。

顺便说一句:您不需要“活动”和“非活动”属性。如果“active”属性为false,则表示它处于非活动状态。

© www.soinside.com 2019 - 2024. All rights reserved.