web-dev-qa-db-ja.com

ElasticSearch POST json検索本体を使用vsGETをURLにjsonを使用

ESのドキュメントによると、これら2つの検索リクエストで同じ結果が得られるはずです。

GET

http://localhost:9200/app/users/_search?source={"query": {"term": {"email":"[email protected]"}}}

POST

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

投稿本文:

{
    "query":  {
         "term": {
               "email":"[email protected]"
          }
    }
}

しかし、最初のものは結果を与えませんが、2番目のものは私に期待される結果を与えます。 ESバージョン0.19.10を使用しています他の誰かが同じ動作をしましたか?これはバグですか?

15
Go4It

sourceは、 RI Search によると有効なクエリ文字列引数ではありません

Elasticsearchでは、検索リクエストを実行する3つの方法が可能です...

リクエスト本文でGET:

curl -XGET "http://localhost:9200/app/users/_search" -d '{
  "query": {
    "term": {
      "email": "[email protected]"
    }
  }
}'

リクエスト本文を使用したPOST:

すべてのクライアントがbodyでGETをサポートしているわけではないため、POSTも許可されます。

curl -XPOST "http://localhost:9200/app/users/_search" -d '{
  "query": {
    "term": {
      "email": "[email protected]"
    }
  }
}'

リクエスト本文なしでGET:

curl -XGET "http://localhost:9200/app/users/_search?q=email:[email protected]"

または(クエリ文字列を手動でURLエンコードする場合)

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

最初のケースでは、クエリを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
imotov