ElasticSearch POST with json search body vs GET with json in url

孤者浪人 提交于 2019-12-03 15:46:50

问题


According to the ES documentation, those 2 search request should get the same results:

GET

http://localhost:9200/app/users/_search?source={"query": {"term": {"email":"foo@gmail.com"}}}

POST

http://localhost:9200/app/users/_search

Post body :

{
    "query":  {
         "term": {
               "email":"foo@gmail.com"
          }
    }
}

But the first one gives no result while the second one gives me the expected result. I use ES version 0.19.10 Did anybody else have the same behavior ? Is this a bug ?


回答1:


source is not a valid query string argument according to URI Search

Elasticsearch allows three ways to perform a search request...

GET with request body:

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

POST with request body:

Since not all clients support GET with body, POST is allowed as well.

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

GET without request body:

curl -XGET "http://localhost:9200/app/users/_search?q=email:foo@gmail.com"

or (if you want to manually URL encode your query string)

curl -XGET "http://localhost:9200/app/users/_search?q=email%3Afoo%40gmail.com"



回答2:


You should URL encode your query in the first case:

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


来源:https://stackoverflow.com/questions/14339696/elasticsearch-post-with-json-search-body-vs-get-with-json-in-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!