2017-08-30 10 views
0

私は弾性Elasticsearchクエリとし、OR条件

{ 
    "_index": "prod", 
    "_type": "log", 
    "_id": "aa", 
    "_source": { 
    "input_type": "log", 
    "sourcetype": "sourcetypeapp1", 
    "message": "APP COMPANY|80d596f6-2082-4a1d-bcfc-740478f626ec|001 ErrorMessage: Some error" 
    "type": "log", 
    "tags": [ 
     "beats_input_codec_plain_applied" 
    ] 
    } 
} 

に以下のようなデータを持っている: -

(Message : "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eA|001" AND Message:"ErrorMessage") 
Or 
(Message : "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eB|002" AND Message:"ErrorMessage") 
Or 
(Message : "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eC|003" AND Message:"ErrorMessage") 

私は多くを知りません

私は以下の単純なクエリが動作しない(1つの条件でのみ):

{ 
    "query": { 
    "bool": { 
     "must": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "Message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eA|001" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

答えて

0

あなたは

{ 
"query": { 
    "match": { 
    "Message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eA|001" 
    } 
} 
} 
+0

複数のor条件を追加するにはどうすればいいですか? –

+0

あなたはboolクエリのshould(OR)を使用することができます。 – DivyaMenon

+0

このクエリを試しました。メッセージに-2082が含まれているかのように正しい結果が得られません。すべてが表示されています。しかし、 "COMPANY | 80d596f6-2082-4a1d-bcfc-740478f626eA | 001。ハイフンのように見える –

0
((condition11 AND condition12) OR (condition21 AND condition22)) 

ようなもので試すことができ、これはあなたが達成したいのか、この

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "must": [ 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eA|001" } }, 
       { "match": { "message": "ErrorMessage"}} 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "must": [ 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eB|002" } }, 
       { "match": { "message": "ErrorMessage"}} 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "must": [ 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eC|003" } }, 
       { "match": { "message": "ErrorMessage"}} 
      ] 
      } 
     }   
     ] 
    } 
    } 
} 

しかし、あなたの例でを試している場合は、condition12とcondition22は同じです。その場合は、

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "message": "ErrorMessage"}}, 
     { 
      "bool": { 
      "should": [ 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eA|001" } }, 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eB|002" } }, 
       { "match": { "message": "COMPANY|80d596f6-2082-4a1d-bcfc-740478f626eC|003" } } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

このクエリを試してみましたが、いずれのメッセージにも表示されているように正しい結果が得られていません。この全体のフレーズ全体を一致させるために、 "COMPANY | 80d596f6-2082-4a1d-bcfc-740478f626eA | 001" –

+0

あなたはAND条件のマルチOR条件の使い方を知りたいと思っていました。一致しないワイルドカードを使用する必要があります。https://www.elastic.co/guide/en/elasticsearch/reference/5.5/query-dsl-match-query.html#query-dsl-match-query Matchは、入力したテキストを分析しますクエリを構築します。 – Dhavaprathap

+0

しかし、それはoに依存します■スキーマの定義方法。 messageプロパティ/ fieldがindex:not_analyzedとして定義されていない場合(https://www.elastic.co/guide/en/elasticsearch/reference/5.5/mapping-index.htmlを参照)、ワイルドカードを使用することはできませんこれを解決する。あなたのテキストはトークン化され、1つのフルストリングではなく複数のストリングとして保存されるためです。その場合、完全なテキストとの照合はできません。すべての要素を含む行を取得するには、各部品(COMPANY、80d596f6、2082など)の複数の一致クエリを1つの必須フィールド内に記述する必要があります。 – Dhavaprathap