小编典典

Rails-如何在searchkick中过滤字符串字段?

elasticsearch

在rails中,我使用searchkickgem进行搜索。我需要添加一个称为status过滤器的字符串字段。如何添加到此插件?

我已经对此问题提出了一个问题Rails-如何在searchkick中添加更多字段以进行过滤

现在,我正在尝试使用字符串字段而不是布尔值,但搜索仍然无法正常工作。请同样帮助我。

我已经添加了一个条件,例如where: {status: 'approved'},根据此条件,我应该只获得活动用户(而不是“已删除”用户)。目前没有任何搜索数据在显示。

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,
  where: {status: 'approved'},
  fields: [{ emails: "exact" }, "name^5"],
  misspellings: { prefix_length: 2 },
  load: false
}

User.search(name, query).records

我也尝试过通过添加filterable之类的 searchkick word_start: [:name], filterable: [:status]

服务器日志是

Processing by UsersController#search as JSON
Parameters: {"query"=>"sal"}
ETHON: Libcurl initialized
ETHON: performed EASY 
effective_url=http://elastic:[email protected]:9200/users-some_index-en/_search response_code=200 return_code=ok total_time=0.498938
User Search (589.3ms)  curl http://14.127.18.141:9200/users-some_index-en/_search?pretty -d '{"query":{"bool":{"must":{"dis_max":{"queries":[{"match":{"emails.true":{"query":"sal","boost":10,"operator":"and","analyzer":"searchkick_autocomplete_search"}}},{"match":{"emails.true":{"query":"sal","boost":1,"operator":"and","analyzer":"searchkick_autocomplete_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}},{"bool":{"must":{"bool":{"should":[{"match":{"name.word_start":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}},{"match":{"name.word_start":{"query":"sal","boost":5.0,"operator":"and","analyzer":"searchkick_word_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"should":{"match":{"name.analyzed":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}}}}]}},"filter":[{"term":{"status":"approved"}}]}},"size":5,"from":0,"timeout":"11s"}'
User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
ETHON: performed EASY effective_url=http://elastic:[email protected]:9200/entities-some_index-en/_search response_code=200 return_code=ok total_time=0.251783

阅读 364

收藏
2020-06-22

共1个答案

小编典典

scope :search_import根据您的条件更改并修改should_index?方法,例如

def should_index?
  User.search_import
end

更改之后,请与after_update任何数据分开调用重新索引

2020-06-22