在日期字段上执行匹配查询时会发生什么
what happens when performing a match query on a date field
为什么我可以执行以下类型的查询:
GET myindex/_search
{
"query": {
"bool" : {
"must": [
{"match": {"@timestamp": "454545645656"}}
]
}
}
}
当字段类型是以下一种时?
"mappings": {
"fluentd": {
"properties": {
"@timestamp": {
"type": "date"
},
有意义吗?查询值是否通过分析器并将字段与什么进行比较?
不,即使您在 date
字段上使用匹配查询,并且匹配被分析意味着它会通过索引时在该字段上应用的相同分析器。如 official ES doc.
中所述
但如 official ES doc on date datatype 中所述。
Queries on dates are internally converted to range queries on this
long representation
您可以在搜索查询中使用 explain=true 参数自行测试。有关解释 API 的更多信息,请参见 here。
我为你的搜索查询做了这个,你可以在结果(解释部分)中看到它在日期字段上显示了范围查询。
URL:- /_search?explain=true
"hits": [
{
"_shard": "[date-index][0]",
"_node": "h2H2MJd5T5-b1cUSkHVHcw",
"_index": "date-index",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"@timestamp": "454545645656"
},
"_explanation": {
"value": 1.0,
"description": "@timestamp:[454545645656 TO 454545645656]", --> see range query
"details": []
}
}
为什么我可以执行以下类型的查询:
GET myindex/_search
{
"query": {
"bool" : {
"must": [
{"match": {"@timestamp": "454545645656"}}
]
}
}
}
当字段类型是以下一种时?
"mappings": {
"fluentd": {
"properties": {
"@timestamp": {
"type": "date"
},
有意义吗?查询值是否通过分析器并将字段与什么进行比较?
不,即使您在 date
字段上使用匹配查询,并且匹配被分析意味着它会通过索引时在该字段上应用的相同分析器。如 official ES doc.
但如 official ES doc on date datatype 中所述。
Queries on dates are internally converted to range queries on this long representation
您可以在搜索查询中使用 explain=true 参数自行测试。有关解释 API 的更多信息,请参见 here。
我为你的搜索查询做了这个,你可以在结果(解释部分)中看到它在日期字段上显示了范围查询。
URL:- /_search?explain=true
"hits": [
{
"_shard": "[date-index][0]",
"_node": "h2H2MJd5T5-b1cUSkHVHcw",
"_index": "date-index",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"@timestamp": "454545645656"
},
"_explanation": {
"value": 1.0,
"description": "@timestamp:[454545645656 TO 454545645656]", --> see range query
"details": []
}
}