2016-12-08 5 views
1

私はelasticsearch-railsをプロジェクトに使用しています。結合検索機能があり、すべての列が1つのテーブルにあります。私はちょうどカスタム検索機能を書いて、検索DSLは動作しませんでした、何も結果を持つことはできません。複数の検索条件を使用するRails 4 elasticsearch、検索機能を組み合わせる

def self.combine_search_filter(remark=nil, sim_card_supplier_id=nil, work_mode=nil, operator_status=nil, platform_management_status=nil, online_status=nil, sim_card_set_id=nil, iccid_from=nil, iccid_to=nil, actived_at_from=nil, actived_at_to=nil, check_in_at_from=nil, check_in_at_to=nil, device_mac_from=nil, device_mac_to=nil) 
    response = __elasticsearch__.search(
     "size": 1000, 
     "query": { 
     "filtered": { 
      "filter": { 
      "bool": { 
       "filter": [ 
       { "term": { "sim_card_supplier_id": sim_card_supplier_id } }, 
       { "term": { "work_mode": work_mode } }, 
       { "term": { "operator_status": operator_status } }, 
       { "term": { "platform_management_status": platform_management_status } }, 
       { "term": { "online_status": online_status } }, 
       { "term": { "sim_card_set_id": sim_card_supplier_id } } 
       { "range": { "iccid": { "from": iccid_from, "to": iccid_to }}}, 
       { "range": { "check_in_at": { "from": check_in_at_from, "to": check_in_at_to }}}, 
       { "range": { "actived_at": { "from": actived_at_from, "to": actived_at_to }}}, 
       { "range": { "device_mac": { "from": device_mac_from, "to": device_mac_to }}} 
       ] 
      } 
      } 
     } 
     } 
    ) 
end 

とparamsがnilを渡す可能性があります。どのようにすれば検索のDSLが有効になりますか?

+0

私は 'elasticsearch-rails'宝石に関する経験はありませんが、これはelasticsearchサーバーを再び使用する' searchkick' https://github.com/ankane/searchkickを使って簡単に行うことができます。あなたが好きならばそれを撃つ。 – Abhinay

+0

何かエラーを投げますか?あなたもそれを投稿できますか? – Abhinay

答えて

0

私の悪い、私はちょうどこれを理解、ルビーキーワード機能は次のようにする必要があります:

def self.combine_search_filter(options = {}) 
    response = __elasticsearch__.search(
     "size": 1000, 
     "query": { 
     "filtered": { 
      "filter": { 
      "bool": { 
       "filter": [ 
       { "term": { "sim_card_supplier_id": 104 } }, 
       { "term": { "work_mode": options[:work_mode] } }, 
       { "term": { "operator_status": options[:operator_status] } }, 
       { "term": { "platform_management_status": options[:platform_management_status] } }, 
       { "term": { "online_status": options[:online_status] } }, 
       { "term": { "sim_card_set_id": 76 } }, 
       { "range": { "iccid": { "from": options[:iccid_from], "to": options[:iccid_to] }}}, 
       { "range": { "check_in_at": { "from": options[:check_in_at_from], "to": options[:check_in_at_to] }}}, 
       { "range": { "actived_at": { "from": options[:actived_at_from], "to": options[:actived_at_to] }}}, 
       { "range": { "device_mac": { "from": options[:device_mac_from], "to": options[:device_mac_to] }}} 
       ] 
      } 
      } 
     } 
     } 
    ) 
end 

この検索は、正しい結果を持っています。 [:key]のオプションがnilの場合は間違った結果になるので、dslハッシュのnilキーを削除してからsearch()に渡します。

1

私はむしろあなたに使用することをお勧めしますsearchkick gemレールは弾力的な検索を簡単なものにし、よりインテリジェントな検索と簡単な検索を可能にします。

関連する問題