2017-12-27 27 views
1

レールでは、私はsearchkick gemを検索に使用しています。フィルターのためにstatusという文字列フィールドを1つ追加する必要があります。このプラグインにどのように追加できますか?Rails - searchkickで文字列フィールドをフィルタリングする方法は?

すでに私は

Rails - How to add more fields for filter in searchkick?は今、私はまだ働いていない、検索文字列フィールドの代わりに、ブールにしようとしていますこの問題に関する一つの質問を提起しました。同じことについて私を助けてください。

私はwhere: {status: 'approved'}のような条件を追加しました。これはアクティブなユーザー(「削除済み」ユーザーではない)のみを取得する必要があるためです。現在のところ、検索データは表示されません。また、私はsearchkick word_start: [:name], filterable: [:status]

Serverのログのように濾過追加することで試してみました

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 

は、あなたの条件に基づいて、

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

あなたが追加したコードの一部では、あなたが何をしようとしているのか理解できません。コードを追加してください。 –

+0

質問が更新されました。 –

答えて

1

変更scope :search_importあるなどshould_index?方法を変更

def should_index? 
    User.search_import 
end 

これが変更された後、rei ndexは別途after_updateすべてのデータ

関連する問題