16

根据 ES 文档,这两个搜索请求应该得到相同的结果:

得到

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

邮政

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

帖子正文:

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

但是第一个没有结果,而第二个给了我预期的结果。我使用 ES 版本 0.19.10 其他人有相同的行为吗?这是一个错误吗?

4

3 回答 3

32

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

Elasticsearch 允许三种方式来执行搜索请求...

GET 请求正文:

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"
于 2013-08-20T20:58:22.253 回答
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
于 2013-01-15T14:25:49.400 回答
1

以上答案与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 正文的请求的命令行中添加 -H'Content-Type: application/json'

于 2021-05-25T16:59:10.700 回答