在python请求中使用转义引号查询Elasticsearch
我正在尝试使用python在python请求中使用转义引号查询Elasticsearch,python,
elasticsearch,python-requests,Python,
elasticsearch,Python Requests,我正在尝试使用python请求查询elasticsearch。接下来,我将使用以下过程: params = { "query": { "filtered": { "query": { "bool": { "should": [ { "query_string": {
请求查询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\'
,则不需要转义任何内容,因为它是包含斜杠的原始字符串
因此,您有两种选择:
如果字符串不是问题所在,请注意字符编码。尝试管理它并使用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转储发送查询,但没有成功。这是我尝试的第一种方法。也许字符串不是问题所在。