【问题标题】:Pass Python variable value to Elasticsearch Query [duplicate]将 Python 变量值传递给 Elasticsearch 查询 [重复]
【发布时间】:2018-01-25 20:36:42
【问题描述】:

我需要在 python 脚本中构建一个 Elasticsearch 查询。在 Elasticsearch 查询中,我需要将外部 python 变量值传递给搜索。

下面是我自己尝试过的python脚本。但它不采用外部变量参数,当我在查询中手动设置值时,它工作正常。

import master
mst = master.Master()

sourceip = "192.168.1.1" // External variable and its value

get_query_result = mst.build_query('{"query": {"bool": {"must": [{"match": { "source": "server_one" }},{"match": {"srcip": sourceip }}],"filter":[ {"range" : {"timestamp" :{"gte": "now-1d", "lte": "now"}}}]}}}')

total_query_result = get_query_result['hits']['total']

print(total_query_result)

当我将 sourceip 变量放入 elasticsearch 查询时,它不会获取变量值并生成结果。它引发了一个错误

但是当我在 Elasticsearch 查询中手动设置 IP 地址值时,脚本成功返回结果。

如何在 Elasticsearch 查询中传递 python 变量。

【问题讨论】:

    标签: python elasticsearch


    【解决方案1】:

    您需要将其插入到查询字符串中,如下所示:

    '{"query": {"bool": {"must": [{"match": { "source": "server_one" }},{"match": {"srcip": {} }}],"filter":[ {"range" : {"timestamp" :{"gte": "now-1d", "lte": "now"}}}]}}}'.format(sourceip)
    

    或者,在我看来更优雅:

    import json
    query = {"query": {"bool": {"must":[
        {"match": { "source": "server_one" }},
        {"match": {"srcip": sourceip }}
    ],
    "filter":[{"range" : {"timestamp" :{"gte": "now-1d", "lte": "now"}}}]
    }}
    query = json.dumps(query)
    

    【讨论】:

      【解决方案2】:

      你需要这样做:

      sourceip = "192.168.1.1"
      
      query = '{"query": {"bool": {"must": [{"match": { "source": "server_one" }},{"match": {"srcip": "%s" }}],"filter":[ {"range" : {"timestamp" :{"gte": "now-1d", "lte": "now"}}}]}}}' % (sourceip)
      
      get_query_result = mst.build_query(query)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-26
        • 2021-03-20
        • 2019-11-03
        • 2015-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多