如何在elasticsearch查询中执行AND条件?

时间:2016-04-01 06:41:18

标签: json elasticsearch

我有以下查询,我想查询ID“abc_12-def的索引名称,该名称落在范围过滤器中指定的日期范围内。

但是下面的查询也是获取不同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" }}} 
  ]
  }
  }
  }'

1 个答案:

答案 0 :(得分:0)

您需要将Bool query用于AND又名MUST条件

{
  "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