Elasticsearch地理空间查询未返回任何点击

时间:2018-06-22 14:00:38

标签: elasticsearch geolocation kibana geospatial

我正在使用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 个答案:

答案 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
                         }
                      }
                   }
                }
            }
        }
    }
}