2016-11-19 93 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

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