繁体   English   中英

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

[英]How can I pass dynamic values to elasticsearch query from python

我正在尝试使用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是具有串联值的变量

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

谢谢!!

您提出的请求采用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 

尝试类似:

import json

l = ["value1", "value2"]

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

但是,我建议看一下Elasticsearch客户。 这将使您的代码更简单,更易于调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM