2017-11-07 22 views
0

私はこのようになり、そのデータを持っている:私はので、私は唯一の4xxに残ることをフィルタ/照会しようとしているLuceneのワイルドカード検索

CK/YZfB6XUmSOSM3IJqM2Q; Response code: 404. Elapsed: 0ms. Request: GET /marketing
4kk/TiKjYU2JY0L2N14QLg; Response code: 200. Elapsed: 10ms. Request: GET /api/monitor
vhXVsw4sBk69qv7dGE8JYw; Response code: 404. Elapsed: 0ms. Request: GET /graph-statistics 4kk/TiKjYW2JY0L2N14QLg; Response code: 200. Elapsed: 10ms. Request: GET /api/monitor

反応。

(これはKibanaに書かれた通りである)私はwildcardsに関するドキュメントを読んで、私は次のクエリの少なくとも一方が動作することを期待したい。ここでは

message: "Response code: 4??" 
message: 4??. 
message: "Response code: 4*" 

は、これらはJSONで見てみましょう

"filter" : [], 
"query" : { 
"query_string" : { 
    "query" : "message: \"Response code: 4??\"", 
    "query" : "message: 4??.", 
    "query" : "message: \"Response code: 4*\"", 
    "analyze_wildcard" : true 
} 
}, 

私はこれまでのところ運がなかったと私はアイデアを実行しているよ...

答えて

1
:場合の事項を(私は簡潔にするために、同じJSON内のすべての3つのクエリを列挙しました)エスケープ

あなたの質問に基づいて、テキストメッセージにインデックスされているようです。 クエリで4XX応答のみを返す場合は、以下のクエリを実行してください。

message: (Response AND code AND 4??) 

このクエリは、本質的に言葉を持つレコードを取得するためのLuceneを求めているレスポンス、コードとその中4xxの。 私はあなたのレコードが経過時間の一部として400を含むかもしれない以下のケースに対してテストしました。

.........レスポンスコード:200経過:404ms .......

しかし、クエリが正常に動作し、404として、これらの結果を返しません。接尾辞としてmsを持っています。したがって、これはの検索と一致しません。

また、コレクション内のフィールドのインデックス方法を確認する必要があります。テキストや文字列として保存されていますか? コード例では、をluceneの特殊文字としてエスケープしていません。

注:代わりに新しい追加のテキストでこれらのキーワードが存在するが、でも、必ずしも

+0

このクエリは、その(と「AND」s)は、文字列_exactly_持つメッセージを探しているようだ与えられた順序では、このクエリをチェックし、 ANDキーワードを使用して検索語を検索します... –

+0

引用符を削除して中括弧を使用するように編集しました。任意のlucene APIまたはKibana UIを使用してクエリを実行していますか? –

+0

これは間違いなく私がこれまでに持っていた最も近いです!残っている(わずかな)問題は、メッセージの前に座っているGuidのランダムな4xxにもマッチするということです。私はキーワードの存在の順序を強制することができないためだと思いますか?これを回避する方法はありますか? –