通过组合范围和术语匹配json格式来查询Elasticsearch

时间:2015-10-20 20:35:15

标签: json elasticsearch

我正在尝试按时间范围查询Elasticsearch索引,另外还有一个术语匹配特定的字符串值。

我尝试过这个查询,看起来非常简单:

 {
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "method": "/customer/help"
          }
        },
        {
          "range" : {
            "startTime": {
              "from" : "2015-10-20T13:00-04:00",
              "to" : "2015-10-20T14:00-04:00"
            }
          }
        }
      ]
    }
  }
}

在这种情况下,我希望给定时间范围内的所有文档的方法值都为"/customer/help"

在我的搜索结果中,我收到了时间范围内的结果,但是当我只想在该字段中使用"method"的结果时,我会获得具有"/customer/help"字段的各种值的文档

1 个答案:

答案 0 :(得分:17)

在地图中,您需要method作为not_analyzed(或使用keyword分析器进行分析),查询应使用term。通过这种方式,您在方法中索引的文本将被索引为单个标记,term可确保您搜索的文本与method中索引的标记完全匹配:

    "method": {
      "type": "string",
      "index": "not_analyzed"
    }

您需要使用的查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "method": "/customer/help"
          }
        },
        {
          "range": {
            "startTime": {
              "from": "2015-10-20T13:00-04:00",
              "to": "2015-10-20T14:00-04:00"
            }
          }
        }
      ]
    }
  }
}