ElasticSearch POST使用JSON搜索体Vs相对URL JSON GET(Elasti

2019-08-06 22:35发布

按照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别的任何人都有相同的行为? 这是一个错误?

Answer 1:

source是不是有效的查询字符串参数根据URI搜索

Elasticsearch允许三种方式进行搜索的请求......

与要求的身体得到:

curl -XGET "http://localhost:9200/app/users/_search" -d '{
  "query": {
    "term": {
      "email": "foo@gmail.com"
    }
  }
}'

POST与请求主体:

因为不是所有的客户支持与身体GET,POST也是被允许的。

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"


Answer 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


文章来源: ElasticSearch POST with json search body vs GET with json in url