2016-04-01 5 views
0

範囲フィルタで指定された日付範囲内にあるID "abc_12-def"のインデックス名を照会する次のクエリがあります。elasticsearchクエリでAND条件を実行するにはどうすればよいですか?

ただし、以下のクエリは異なるIDの値も取得しています例えば:abc_12-EDF、abc_12-PGFなど)と日付範囲外のその年の秋、私はここにAND条件を与えることができる方法上の任意のアドバイスのおかげ

curl -XPOST 'localhost:9200/indexname/status/_search?pretty=1&size=1000000' -d '{ 
"query": { 
"filtered" : { 
    "filter": [ 
    { "term": { "ID": "abc_12-def" }}, 
    { "range": { "Date": { "gte": "2015-10-01T09:12:11", "lte" : "2015-11-18T10:10:13" }}} 
    ] 
    } 
    } 
    }' 
+0

あなたの 'id'フィールドは'分析されました 'と思われますか? – Richa

+0

その意味を教えていただけますか? – Sweet

+0

'GET/index_name/type_name/_mapping'を使ってマッピングをチェックし、問題を指定してください。 – Richa

答えて

0

あなたはANDMUST別名条件のためBool queryを使用する必要があります。?。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "ID": "abc_12-def" 
      } 
     }, 
     { 
      "range": { 
      "Date": { 
       "gte": "2015-10-01T09:12:11", 
       "lte": "2015-11-18T10:10:13" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

また、すべてのフィールドはデフォルトでstandard analyzerを使用して解析されます。つまり、abc_12-defは[abc_12、def]としてトークン化されています。 term queryは文字列を解析しません。

完全一致を検索する場合は、フィールドにnot_analyzedとマークする必要があります。ここでは、not_analyzedとしてどのようにマップするかについて説明します。

関連する問題