Sense ツールを使用して、2 つの非常に単純なクエリを作成します。メソッド (GET または POST) を除いて、クエリは同じです。一度に 1 つのクエリを実行すると、結果は非常に似ていますが、クエリ自体に関連していないように見える点で異なり (take、max_score など)、スコープを大きくするほど類似性が低くなります。
たとえば、これらは私が期待するのと同じ結果を返します。
私のGETクエリ:
GET syslog-*/_search
{
"size": 5,
"query" : {
"bool": {
"must":
{
"term":{"@hostname":"MyServer"}
}
}
}
}
私の POST クエリ:
POST syslog-*/_search
{
"size": 5,
"query" : {
"bool": {
"must":
{
"term":{"@hostname":"MyServer"}
}
}
}
}
に変更すると"size": 50
、最初は同じですが、出力の約 1/3 でドリフトが始まります。最終的に、PUT に存在するタイムスタンプが GET の結果のどこにも見つからないところまで到達します。のようなものに移動すると"size": 5000
、結果が大きく異なるため、これらのクエリから作成されたレポート データの正確性を疑い始めます。
Sense で ELK を使い始めたばかりなので、これは正常な動作である可能性があります。上級開発者は、Sense を使用して Elasticsearch データベースから情報を取得することに関しては、GET と PUT に機能上の違いはないことを保証しますが、私は彼を誤解している可能性があります。いずれにせよ、この質問を投稿して、これを正しく理解しているかどうかを確認したいと思います。
この問題に対処していると思われる別の質問 ( here ) を見つけました。しかし、詳細を読むと、その投稿で受け入れられた回答によると、POST は実際にはボンネットの下の GET であるため、事態はさらに混乱します。
説明は、GET と POST の http メソッドに関するものです。舞台裏では、Sense は実際に GET リクエストを HTTP POST に変換します..GET と書いても、実際の http リクエストは POST です。