2016-11-19 39 views
0

私はpythonスクリプトを使用して弾性検索からデータを取得しようとしていますが、特定の値のデータのみが必要です。Pythonのelasticsearchクエリに動的な値を渡すには

POST _search 
{ 
"sort": [ 
    { 
     "dimensions.memberId.string_value": { 
      "order": "desc" 
     } 
    } 
], 
"from": 0, 
"size": 20, 
"fields": [ 
    "dimensions.memberId.string_value", 
    "measures.ce_timeStamp" 
], 
"query": { 
    "bool": { 
     "must": [ 
      { 
      "term": { 
       "eventType": "GG" 
      } 
      }, 
      { 
      "term": { 
       "corporateId": "abc" 
      } 
      }, 
      { 
      "terms": { 
       "memberId.string_value": ["127281961", "127274705"] 
      } 
      }, 
      { 
      "terms": { 
       "status.string_value": ["B", "P", "C", "A"] 
      } 
      } 
     ] 
    } 
} 
} 

これは私の実際のクエリであり、私はpythonで変数としてmemberIdsを送信したいと思います。

私は以下のように変数として全体のクエリを構築した:

queryPart1 = " {\"sort\": [ \ 
     { \ 
     \"dimensions.memberId.string_value\": { \ 
      \"order\": \"desc\" \ 
     } \ 
     }\ 
    ],\ 
    \"from\": 0, \ 
    \"size\": 20, \ 
    \"fields\": [ \ 
     \"dimensions.memberId.string_value\", \ 
     \"measures.ce_timeStamp\" \ 
    ], \ 
    \"query\": { \ 
     \"bool\": { \ 
     \"must\": [ \ 
      { \ 
       \"term\": { \ 
        \"eventType\": \"GG\" \ 
       } \ 
      }, \ 
      { \ 
       \"term\": { \ 
        \"corporateId\": \"ABC\" \ 
       } \ 
      }, \ 
      { \ 
       \"terms\": { \ 
        \"dimensions.memberId.string_value\": " 

    queryPart2 = "} \ 
      }, \ 
      { \ 
       \"terms\": { \ 
        \"dimensions.1_shipment_status.string_value\": [\"B\", \"P\", \"C\", \"A\"] \ 
       } \ 
      } \ 
      ] \ 
     } \ 
     } \ 
    }" 



querybody = queryPart1+varMemberId+queryPart2 

とvarMemberIDこれは私のために働いていない

連結された値を持つ変数です。この方法で何が間違っているのか教えてください。

ありがとうございます!

答えて

0

リクエストはJSON文字列の形式です。 Pythonは効率的にJSONデータを処理するためにjsonモジュールを提供しています。 json.dumps()を使用すると、dict/listオブジェクトをJSON文字列に変換できます。例えば

import json 

my_variable = 33 # variable you want to pass 

params = { 
    'param1': 'value_1', 
    'param2': 'value_2', 
    'param3': my_variable # your variable 
} 

json_str = json.dumps(params) 
# `json_str` will hold the value in the form of json string as: 
# '{"param3": 33, "param2": "value_2", "param1": "value_1"}' 
#   ^value of your variable 
+0

ありがとうございました!このメソッドは動作しています – Agastya

0

ような何か試してみてください:

import json 

list = ["value1", "value2"] 

\"dimensions.memberId.string_value\": + json.dumps(list) + queryPart2 

をしかし、私はelasticsearchクライアントを見てお勧めします。コードをはるかに単純で簡単にデバッグすることができます。

+0

ありがとう!今それは私のために働く。 – Agastya

+0

答えてくれますか? –

関連する問題