搜索时无法检索地理位置数据字段

时间:2015-12-30 17:39:24

标签: elasticsearch

我有一个名为loc的字段的索引,它正确映射为地理点。

运行搜索时:

curl -XGET 'http://localhost:9200/DB/_search'

我得到10个左右的结果,所有这些结果似乎都在loc对象中有_source

如果我尝试:

curl -XGET 'http://localhost:9200/DB/_search?fields=name'

我得到一个fields对象,其中name字段已正确设置(name存在,它是另一个字段,它是一个字符串)。事情是,如果我对loc字段尝试相同的事情,如:

curl -XGET 'http://localhost:9200/DB/_search?fields=loc'

我无法获得任何回复,包括_sourcefields对象。

运行此查询时如何返回loc字段?

加分问题:有没有办法将loc字段作为geohash返回?

更新,这是映射:

{
  "geonames": {
    "mappings": {
      "place": {
        "properties": {
          "ele": {
            "type": "string"
          },
          "geoid": {
            "type": "string"
          },
          "loc": {
            "type": "geo_point"
          },
          "name": {
            "type": "string"
          },
          "pop": {
            "type": "string"
          },
          "tz": {
            "type": "string"
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

您应该使用source filtering代替fields,并且您将获得预期的loc字段。

curl -XGET 'localhost:9200/DB/_search?_source=loc'

引用有关字段的官方文档(重点已添加):

  

fields参数是关于显式标记为存储在映射中的字段,默认情况下关闭,通常不建议使用。使用源过滤来选择要返回的原始源文档的子集。