2016-09-02 1 views
0

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です。

+0

キャッシングと何とかつながっているのでしょうか?システムが分散されているか、データが1か所からのみ収集されていますか? – ruhungry

+0

GETとPOSTは異なる**です。 SenseでGETを使用してペイロードを送信しようとすると、左側に「ブラウザが本文付きのGET要求をサポートしていない、POSTとして実行される」という警告が表示されます。ブラウザの開発ツールの[ネットワーク]タブを見ると、Senseは実際に両方の時間にPOSTリクエストを送信することがわかります。この[その他の回答](http://stackoverflow.com/questions/34795053/es-keeps-returning-every-document/34796014#34796014)も参照してください。 – Val

+0

[弾性検索クエリについての混乱](http://stackoverflow.com/questions/33658619/confused-about-elasticsearch-query) –

答えて

0

もう一度他の開発者と話をし、Elasticsearchのドキュメントを掘り下げて掘り下げて答えを見つけました。要するに、定義されたソート方法の欠如が問題でした。並べ替えないときThisが行動に関するドキュメントの重要なビットだった:

を...私たちはちょうど関連性を決定するための試みで...一致する文書をしたいことを示しています。ドキュメントは実質的にランダムな順序で返されます...

GETとPOSTの全体の事柄は重要ではありません。サイズが大きくなるにつれて結果がますます一致しなくなったのは、クエリが大きくなるにつれて結果の「ランダム性」が高くなるためです。したがって、この2つのクエリ(現在は日付でソートされています)...

GET syslog-*/_search 
{ 
    "size": 1000, 
    "query" : { 
    "bool": { 
     "must": 
     { 
     "term":{"@hostname":"MyServer"} 
     } 
    } 
    }, 
    "sort":{"@timestamp":{"order":"desc"}} 
} 
"hits":{"total":7554334,.... 

...まったく同じ結果を返します。ヒット数は、サイズが1000に設定されていても同じです。

POST syslog-*/_search 
{ 
    "size": 1000, 
    "query" : { 
    "bool": { 
     "must": 
     { 
     "term":{"@hostname":"MyServer"} 
     } 
    } 
    }, 
    "sort":{"@timestamp":{"order":"desc"}} 
} 
"hits":{"total":7554334,.... 

サニティが回復しました。 :D

関連する問題