如何将动态值从python传递给elasticsearch查询

时间:2016-11-19 21:24:43

标签: python variables elasticsearch

我正在尝试使用python脚本从弹性搜索中检索数据,我只需要针对特定​​值的数据。

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是具有连接值的变量

这对我不起作用。你能指出这种方法有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

尝试类似:

import json

list = ["value1", "value2"]

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

但是,我建议查看elasticsearch客户端。它将使您的代码更简单,更容易调试。