2017-12-27 473 views
1

在軌,我使用searchkick寶石搜索。我需要爲過濾器添加一個名爲status的字符串字段。我怎樣才能添加到這個插件?Rails的 - 如何searchkick過濾字符串字段?

已經我提出關於這個問題Rails - How to add more fields for filter in 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 

我也已經加入過濾像searchkick word_start: [:name], filterable: [:status]

Server日誌嘗試是,

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 
+0

你添加的代碼段的after_update是不夠的,我們理解你想要什麼。添加更多代碼。 –

+0

問題已更新。 –

回答

1

更改scope :search_import根據你的病情和修改should_index?方法一樣,

def should_index? 
    User.search_import 
end 

更改後,請致電rei ndex單獨的任何數據