2016-05-11 13 views
1

私のコードのいくつかの条件に応じてクエリを構築できるかどうかを知りたい。この例では条件に応じたElasticSearchビルドクエリ

self.search(query: { 
        bool: { 
         must: [ 
         { term: { country_id: country_id }}, 
         { term: { region_id: region_id }} => if region_id is not nil 
] 
        } 
        } 

、私は行を追加したいと思います:

{ term: { region_id: region_id }} 

のregion_idが私の方法に存在する/ nilでない場合に限ります。

SQLでは、マルチラインと条件でクエリを作成できます。 私はESで同じことをすることはできますか?

情報:あなたは、クエリを構築し、条件付きであなたが望む要素(用語)を追加するクエリ変数を作成したいと思うここでルビーで

おかげ

+0

私はプログラミングのようにすることはできませんが、クエリ自体でこれを行う必要があるとは思いません。 –

+0

ああ、私はあなたの質問を誤解しました:-)。これはあなたのコードでのみだった... –

答えて

1

作業。これを試してみてください:

# Start with a base search definition 
query = { 
    query: { 
    bool: { 
     must: [ 
     { term: { country_id: country_id }} 
     ] 
    } 
    } 
} 

# Conditionally add search terms 
if region_id is not nil 
    query[:query][:bool][:must] << { term: { region_id: region_id }} 
end 

# Execute the search 
self.search(query) 
+0

完璧な答え!私は構文を使用できることを知らなかった: 'query [:query] [:bool] [:must]'ありがとう! –

関連する問題