Senseツールを使用して、2つの非常に単純なクエリがあります。メソッド(GETまたはPOST)を除いて、クエリは同一です。一度に1つのクエリを実行すると、非常によく似ていますが、クエリ自体に関連していない(たとえば、take、max_score)方法が異なり、範囲が大きくなるほど類似性が低くなる結果が見られます。POSTとGETを使用すると、ELKクエリのSenseで異なる結果が返される
マイ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
のようなものに行くと、結果は非常に大きく異なってしまい、これらのクエリから構築されたレポートデータの精度が疑わしくなり始めています。
私はちょうど感覚でELKを使い始めているので、これは正常な動作かもしれません。上級開発者は、Senseを使用してElasticsearchデータベースから情報を取得することに関して、GETとPUTの機能的な違いはないと私に保証しますが、私は彼を誤解している可能性があります。いずれにしても、この質問を投稿して、これを正しく理解しているかどうかを確認したい。
この問題を解決したと思われる別の質問(here)が見つかりました。しかし、詳細を読むと、それは私のことをさらに混乱させてしまいます。なぜなら、その投稿の回答によれば、POSTは実際にはボットの下でのGETです。
この説明は、GETとPOSTのhttpメソッドに関連しています。 シーンの裏側では、実際にはGETリクエストをHTTP POSTに変換します。 をGETしても、実際のHTTPリクエストはPOSTです。
キャッシングと何とかつながっているのでしょうか?システムが分散されているか、データが1か所からのみ収集されていますか? – ruhungry
GETとPOSTは異なる**です。 SenseでGETを使用してペイロードを送信しようとすると、左側に「ブラウザが本文付きのGET要求をサポートしていない、POSTとして実行される」という警告が表示されます。ブラウザの開発ツールの[ネットワーク]タブを見ると、Senseは実際に両方の時間にPOSTリクエストを送信することがわかります。この[その他の回答](http://stackoverflow.com/questions/34795053/es-keeps-returning-every-document/34796014#34796014)も参照してください。 – Val
[弾性検索クエリについての混乱](http://stackoverflow.com/questions/33658619/confused-about-elasticsearch-query) –