Mapping for array of geo_point fields in elastic

2019-06-24 06:11发布

I'd like to persist some JSON to elastic(search) that looks a little like this:

{
  "name": "value",
  "points": [
    { "lat": 0.0, "lon": 0.0 },
    { "lat": 1.0, "lon": 1.0 }
  ]
}

Points being a list of the type geo_point in elastic. Because they're geo_point values I need to define the index mapping, but the closest I can see is to do this:

"place": {
  "properties": {
    "name": {
      "type": "string"
    },
    "points": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

Which would mean having each point be a map with a single key of location and a geo_point value. I just want the geo_points, is this possible?

2条回答
The star\"
2楼-- · 2019-06-24 06:41

You can define your mapping as below :

"place": {
  "properties": {
    "name": {
      "type": "string"
    },
    "points": {  // <--  it can also be a multi-valued field if you insert multiple values, as skal88 mentioned, your json would perfectly fit in this mapping.
      "type": "geo_point" 
    }
  }
}
查看更多
再贱就再见
3楼-- · 2019-06-24 06:44

Yes. When you define a mapping, the values inside field can be single or array of the specific "type". You need only insert on this value a array of geo_points. Some like this:

{
  "name": "some name",
  "points": [
    { lat: 41.12, lon: 2.023 },
    { lat: 30, lon: 4.1 }
  ]
}
查看更多
登录 后发表回答