我正在使用Kibana在Elasticsearch中查看当前正在开发的功能的地理空间数据集。有一个位置索引,其中包含字段“ loc.coordinates”,它是一个geo_point,具有这样的数据:
loc.coordinates 25.906958000000003, 51.776407000000006
但是,当我运行以下查询时,没有任何结果:
查询
GET /positions/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "2000km",
"loc.coordinates" : {
"lat" : 25,
"lon" : 51
}
}
}
}
}
}
回复
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 6,
"successful": 6,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
我试图理解为什么会这样,因为索引中有超过250,000个数据点,而且无论搜索区域有多大,我都没有命中。当我查看位置索引映射时,会看到以下内容:
"loc": {
"type": "nested",
"properties": {
"coordinates": {
"type": "geo_point"
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
我是Elasticsearch的新手,并且一直在学习文档,但是到目前为止,我还不明白为什么我的地理查询无法按预期工作。我在做什么错了?
答案 0 :(得分:1)
您的loc
字段的类型为nested
,因此您需要使用nested
查询来相应地查询该字段:
GET /positions/_search
{
"query": {
"bool" : {
"filter" : {
"nested": {
"path": "loc",
"query": {
"geo_distance" : {
"distance" : "2000km",
"loc.coordinates" : {
"lat" : 25,
"lon" : 51
}
}
}
}
}
}
}
}