elasticsearch,python-requests,Python,elasticsearch,Python Requests" /> elasticsearch,python-requests,Python,elasticsearch,Python Requests" />

在python请求中使用转义引号查询Elasticsearch

在python请求中使用转义引号查询Elasticsearch,python,elasticsearch,python-requests,Python,elasticsearch,Python Requests,我正在尝试使用python请求查询elasticsearch。接下来,我将使用以下过程: params = { "query": { "filtered": { "query": { "bool": { "should": [ { "query_string": {

我正在尝试使用python
请求查询
elasticsearch
。接下来,我将使用以下过程:

params = {
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "should": [
                        {
                            "query_string": {
                                "query": r'\"text in quotes\"'
                            }
                        }
                    ]
                }
            },
            "filter": {
                "bool": {
                    "must": [
                        {
                            "range": {
                                "@timestamp": {
                                    "from": 1458581389860,
                                    "to": 1458494989000
                                }
                            }
                        }
                    ]
                }
            }
        }
    },
    "size": 100,
}
response = requests.get(url, params=params)
不幸的是,对于elasticsearch,查询中的引号似乎没有正确转义。我也试过:

  • “\\”引号中的文本\\”
  • response=requests.get(url,data=json.dumps(params))
有效的等效旋度如下所示:

curl -XGET 'MYURL/_search?pretty' -d '{
    "query": {
        "filtered": {
            "query": {
                "bool": {
                    "should": [
                        {
                            "query_string": {
                                "query": "\"test in quotes\""
                            }
                        }
                    ]
                }
            },
            "filter": {
                "bool": {
                    "must": [
                        {
                            "range": {
                                "@timestamp": {
                                    "from": 1458581389860,
                                    "to": 1458494989000
                                }
                            }
                        }
                    ]
                }
            }
        }
    },
    "size": 100,
}'

在cURL中,您正在转义引号<代码>“引号中的文本”
,这将成为
“引号中的文本”

Python的问题是,如果使用单引号,就像使用
r'\'text in quotes\'
那样,将打印
\'text in quotes\'
,则不需要转义任何内容,因为它是包含斜杠的原始字符串

因此,您有两种选择:

  • 对Python字符串使用双引号,并对引号中的文本进行转义
  • 只需将单引号与未转义的双引号一起使用““引号中的文本”

  • 如果字符串不是问题所在,请注意字符编码。尝试管理它并使用UTF-8。

    结果表明,python示例中使用的uri转到了
    http
    ,而
    curl
    示例的uri是
    https
    。它适用于以下更改:

    • http->https
    • 字符串为“
      ”“引号中的文本”
    • 将查询作为数据
      response=requests.get(url,data=json.dumps(params))

    我不明白为什么它以前部分工作,返回了100个点击。

    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>与
    r'\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>是一样的。传递值后,
    请求
    是否会对字符串执行某些操作?可能会,但我不知道为什么会。您是否尝试过使用python elasticsearch库?另外,您是否阅读了您提供的链接上的答案?
    params
    参数不适用于正在发送的数据。如果您试图向服务器发送数据,您应该特别使用
    数据
    参数。我正在尝试发送链接中概述的查询参数,这就是我使用
    参数
    的原因。我还尝试使用
    data
    参数通过上述dict的json转储发送查询,但没有成功。这是我尝试的第一种方法。也许字符串不是问题所在。