如果使用“fields []”指定,则似乎会忽略结果中的geo_point字段

我具有索引test01的以下映射

{
   "test01": {
      "mappings": {
         "activity": {
            "properties": {
               "location": {
                  "type": "string"
               },
               "mygeo": {
                  "type": "geo_point",
                  "doc_values": true,
                  "fielddata": {
                     "format": "compressed",
                     "precision": "1km"
                  }
               }
            }
         }
      }
   }
}

索引包含一个 Activity
{
      "mygeo": {
        "lat": 51.247607909,
        "lon": 22.565701278
      },
      "location" : "New York"
}

询问
GET /test01/_search
{
  "size" : 1,
  "fields": ["location", "mygeo"]
}

在缺少mygeo字段的地方生成以下内容。 (我也尝试过“字段”:[“位置”,“mygeo.lat”,“mygeo.lon”,“mygeo”])。
 "hits": [
     {
        "_index": "test01",
        "_type": "activity",
        "_id": "1",
        "_score": 1,
        "fields": {
           "location": [
              "New York"
           ]
        }
     }
  ]

我可以获得mygeo对象的唯一方法是通过添加“_source”:{“includes”:[“mygeo”]}通过_source。

有什么方法可以使用“field”参数获取geo_point字段吗?

我已经尝试过Rest API和Java API。两者都使用Elasticsearch 1.7.1版产生相同的结果。

谢谢

最佳答案

因此,按照逻辑,我通过在您的索引映射中添加"store": true来复制并解决了该问题,现在它允许我使用fields而不是_source来检索lon / lat。

请查看在本地主机上对Sense进行的复制:

DELETE test

PUT /test
{
  "mappings": {
    "test1": {
      "properties": {
        "location": {
          "type": "string"
        },
        "mygeo": {
          "type": "geo_point",
          "doc_values": true,
          "store": true,
          "fielddata": {
            "format": "compressed",
            "precision": "1km"
          }
        }
      }
    }
  }
}

POST /test/test1/
{
  "mygeo": {
    "lat": 51.247607909,
    "lon": 22.565701278
  },
  "location": "New York"
}


GET /test/_search
{
  "size" : 1,
  "fields": ["location", "mygeo"]
}

因此,此查询确实带回了您期望的结果。唯一的问题是您的局域网/局域网被格式化为数组。查看查询结果:
{
  "hits" : [{
      "_index" : "test",
      "_type" : "test1",
      "_id" : "AVCGqhsq9y2W0mh1rPgV",
      "_score" : 1,
      "fields" : {
        "mygeo" : [
          "51.247607909,22.565701278"
        ],
        "location" : [
          "New York"
        ]
      }
    }
  ]
}

但是,这是Elasticsearch正式支持的格式之一。取自documentation:



另外,请注意以下文档:

关于elasticsearch - Elasticsearch响应中缺少geo_point字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33132731/

10-11 08:48