2016-08-24 72 views
0

私はSplunkクエリをElasticsearch DSLに翻訳しています。 私はログ内のURLは以下のようなものが含まれているかどうかを確認したい:elasticsearch正規表現クエリを正しく使うには?

"script>" OR "UNION ALL SELECT" 

私は、思ったdocに行き、十分なフェア:返信

{ 
    "regexp": { 
    "http.url": "script>" 
    } 
} 

Elasticsearch(2.3):

"root_cause":[ { "reason": "検索元の解析に失敗しました。不明な検索要素[regexp]"、 "t YPE ": "search_parse_exception"、 "行":2、

誰かがクエリのこれらの種類について教えてください啓発もらえますか?

答えて

2

これは、ドキュメンテーションを始めるときにはかなり間違いです。ドキュメントでは、一般に生のクエリ(およびそのパラメータ)のみを表示します。クエリは、複合クエリまたはリーフクエリです。 regexpはリーフクエリの例です。

ただし、実際にはクエリを送信するには不十分です。あなたはどのクエリのDSLの単純なラッパーの一部が欠落している:

{ 
    "query": { 
    "regexp": { 
     "http.url": "script>" 
    } 
    } 
} 

は、複合クエリを使用するには、最善の方法は、bool compound queryを使用することです。

mustmust_notshould、又はfilterを有し、それぞれが(わずか無得点、キャッシュ可能なクエリであるか、またはフィルタ)クエリの配列を受け入れます。 shouldORと似ていますが、それに加えてmustを追加したときの動作については、ドキュメントをお読みください。要は、shouldはそれ自体がOR(以下に示す)のようですが、mustと組み合わせると、"minimum_should_match": 1を使用しないと完全にオプションになります。

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "term": { 
      "http.url": "script>" 
      } 
     }, 
     { 
      "term": { 
      "http.url": "UNION ALL SELECT" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

私は今それを取得します。混乱させて申し訳ありません。このクエリは機能するようです。クエリにORロジックを適用する方法を教えていただければ幸いです。私は私の質問であまりにも明示していませんでした。 – wishi

+0

あなたは行き​​ます。 **正規表現を 'term 'に変更する自由を取った。これは** exact ** matchの動作を前提としている。 – pickypg