Elasticsearch 地理空间查询不返回任何命中
Posted
技术标签:
【中文标题】Elasticsearch 地理空间查询不返回任何命中【英文标题】:Elasticsearch geospatial queries returning no hits 【发布时间】:2018-06-22 14:00:38 【问题描述】:我正在使用 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 的新手,一直在阅读文档,但到目前为止,我不明白为什么我的地理查询没有按预期工作。我做错了什么?
【问题讨论】:
【参考方案1】:您的loc
字段属于nested
类型,因此您需要使用nested
查询相应地查询该字段:
GET /positions/_search
"query":
"bool" :
"filter" :
"nested":
"path": "loc",
"query":
"geo_distance" :
"distance" : "2000km",
"loc.coordinates" :
"lat" : 25,
"lon" : 51
【讨论】:
啊,这就解释了!嵌套它有什么明显的优势吗?查看其余的映射,似乎没有必要。此外,当我在vessel_position 索引上对loc.coordinates 进行桶聚合时,Visualize > Map 可视化中目前没有显示任何内容,这一定是原因。 如果您有一个对象,则不需要嵌套(仅当您有一个对象数组时)。另请注意,嵌套数据类型无法在 KIbana 中查询。以上是关于Elasticsearch 地理空间查询不返回任何命中的主要内容,如果未能解决你的问题,请参考以下文章
如何进行地理距离查询仅返回我尚未“喜欢”的结果、Elastic Search、Dynamo DB
Mongoosejs:将 query.or() 与地理空间查询一起使用