我正在尝试使用python elasticsearch
查询requests
。在this post之后,我正在使用以下过程:
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正确转义。我也试过了:
'\\"text in quotes\\"'
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,
}'
答案 0 :(得分:1)
在cURL中,您正在逃避引号。 "\"text in quotes\""
,这将成为"text in quotes"
。
你的Python问题是如果你使用像r'\"text in quotes\"'
那样打印\"text in quotes\"
的单引号,你就不需要逃避任何事情,因为它是一个原始字符串包含斜杠。
所以,你有两个选择:
"\"text in quotes\""
'"text in quotes"'
答案 1 :(得分:0)
如果字符串不是问题,请注意字符编码。尝试管理它并使用UTF-8。
答案 2 :(得分:0)
原来,在python示例中使用的uri转到http
,而curl
示例的uri是https
。它适用于以下更改:
'"text in quotes"'
response = requests.get(url, data=json.dumps(params))
我不明白为什么它之前有部分工作,100次点击被退回。