2016-11-19 97 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"] 
      } 
      } 
     ] 
    } 
} 
} 

這是我的實際查詢,我想發送memberIds作爲python中的變量。

我已經構建了整個查詢作爲一個變量如下:

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()將字典/列表對象轉換爲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

好的。你能接受答案嗎? –