根据ES文档,这2个搜索请求应该得到相同的结果:
获取
http://localhost:9200/app/users/_search?source={"query": {"term": {"email":"foo@gmail.com"}}}
POST
http://localhost:9200/app/users/_search
发帖机构:
{
"query": {
"term": {
"email":"foo@gmail.com"
}
}
}
但是第一个没有给出结果,而第二个给了我预期的结果。我使用ES版本0.19.10 其他人有同样的行为吗?这是一个错误吗?
答案 0 :(得分:22)
source
不是有效的查询字符串参数
Elasticsearch允许三种方式执行搜索请求......
请求正文:
curl -XGET "http://localhost:9200/app/users/_search" -d '{
"query": {
"term": {
"email": "foo@gmail.com"
}
}
}'
请求正文发布:
http://www.elasticsearch.org/guide/reference/api/search/uri-request/
curl -XPOST "http://localhost:9200/app/users/_search" -d '{
"query": {
"term": {
"email": "foo@gmail.com"
}
}
}'
没有请求正文GET:
curl -XGET "http://localhost:9200/app/users/_search?q=email:foo@gmail.com"
或(如果您想手动对您的查询字符串进行URL编码)
curl -XGET "http://localhost:9200/app/users/_search?q=email%3Afoo%40gmail.com"
答案 1 :(得分:2)
您应该在第一种情况下对您的查询进行URL编码:
http://localhost:9200/app/users/_search?source=%7b%22query%22%3a+%7b%22term%22%3a+%7b%22email%22%3a%22foo%40gmail.com%22%7d%7d%7d
答案 2 :(得分:0)
以上答案与Elasticsearch 6.0及以上版本不兼容。ES从6.0版本开始引入了Strict Content type check。 该链接解释了它: https://www.elastic.co/blog/strict-content-type-checking-for-elasticsearch-rest-requests。 对于 curl,需要在任何具有 JSON body 的请求的命令行中添加 -H'Content-Type: application/json'