2017-12-20 27 views
0

フィルタでelasticsearchの結果を収集しようとしています。フィルターを追加すると予期せぬ結果が得られます。 (「Exception」または「Error」という用語に一致する結果しか期待していません)。フィルタはboolと一緒に使用できません

おそらく、間違った場所にフィルタを配置しましたか?

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "message": "error" 
      } 
     }, 
     { 
      "match": { 
      "message": "exception" 
      } 
     } 
     ], 
     "must_not": { 
     "match": { 
      "message": "io.vertx.spi.cluster.zookeeper.ZookeeperClusterManager" 
     } 
     }, 
     "filter": [ 
     { 
      "range": { 
      "@timestamp": { 
       "gt": "now-1000m" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

ここにあまり情報はありません。予期しない結果は何ですか? –

+0

'@ timestamp'のマッピングと"不正な "一致するドキュメントの例を示してください。 –

+0

'' minimum_should_match "を追加するとどうなりますか?1' juste' should'の上に? – Val

答えて

0

問題があります。

句(クエリー)は、マッチングドキュメントに表示されなければなりません。 boolクエリがクエリコンテキスト内にあり、mustまたはfilter句を持つ場合、shouldクエリが一致しない場合でもドキュメントはboolクエリと一致します。この場合、これらの節はスコアに影響を及ぼすためにのみ使用されます。 boolクエリがフィルタコンテキストであるか、またはmustまたはfilterのいずれも持たない場合、少なくとも1つのshouldクエリは、boolクエリと一致するためにドキュメントと一致する必要があります。この動作は、minimum_should_matchパラメータの設定によって明示的に制御される可能性があります。