elasticsearch curl如何使用数据负载执行get请求?
ElasticSearch的介绍材料包括以下示例elasticsearch curl如何使用数据负载执行get请求?,elasticsearch,curl,get,elasticsearch,Curl,Get,ElasticSearch的介绍材料包括以下示例curlrequest: curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "query_string" : { "query" : "(new york city) OR (big apple)", "default_field" :
curl
request:
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"query_string" : {
"query" : "(new york city) OR (big apple)",
"default_field" : "content"
}
}
}
'
此请求有两个我认为不兼容的参数:
,指定请求为-X GET
GET
,指定请求具有数据负载-d[…]
我认为只有在
PUT
或POST
请求中才能指定数据有效负载,因为GET
请求没有任何数据有效负载的概念。这是有效的curl
命令吗?它到底做什么?上面的curl
请求是一个有效的请求,事实上,如果您有索引和数据,那么您可以检查命令的输出
我在我的系统和ES索引中尝试了它,它给了我正确的响应
curl -v -X GET "localhost:9500/querytime/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"query_string" : {
"query" : "(avengers) OR (big apple)",
"default_field" : "movie_name"
}
}
}'
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 9500 (#0)
> GET /querytime/_search?pretty HTTP/1.1
> Host: localhost:9500
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 156
>
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 200 OK
< content-type: application/json; charset=UTF-8
< content-length: 905
<
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 0.14874382,
"hits" : [
{
"_index" : "querytime",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.14874382,
"_source" : {
"movie_name" : "Avengers: Infinity War"
}
}
]
}
}
curl-v-X GET“localhost:9500/querytime/_search?pretty”—H'内容类型:application/json'-d'
{
“查询”:{
“查询字符串”:{
“查询”:“(复仇者)或(大苹果)”,
“默认\u字段”:“电影\u名称”
}
}
}'
*正在尝试::1。。。
*TCP_节点集
*已连接到本地主机(::1)端口9500(#0)
>GET/querytime/_search?相当不错的HTTP/1.1
>主机:本地主机:9500
>用户代理:curl/7.64.1
>接受:*/*
>内容类型:application/json
>内容长度:156
>
*上传已完全发送:156字节中的156字节
正如curl命令的官方手册中所述,如果您使用的是基于*nix
的系统,那么您可以在curl
的手册中进行以下搜索
-G、 --得到
使用此选项时,将使使用-d、-data、-data binary或-data urlencode指定的所有数据在
HTTP GET请求,而不是POST请求
用过。这个
数据将用“?”分隔符附加到URL
正如SO answer中所解释的,它还取决于web服务器来解析GET请求中的正文。我明白了,所以GET请求的正文为空是一个建议,取决于服务器的解释,而不是HTTP协议的硬性要求,服务器可以选择接受带有正文的GET请求。我仍然认为这不符合协议定义的意图,但我可以理解为什么这样做很方便。@AlekseyBilogur,我同意你的观点,但这取决于实现者,尤其是ES,你会看到很多这样的请求:-)。顺便说一句,感谢您的支持和接受,它激励我们超越自我,帮助社区