我正在尝试按时间范围查询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"
字段的各种值的文档
答案 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"
}
}
}
]
}
}
}