Copying co-ordinates to field geo_point type using copy_to in Elasticsearch

Viewed 103

I am trying to work with geo code in elasticsearch, I have an index which is having two different unique field as latitude and longitude. Both are being stored as double, I want to use copy to feature of elasticsearch and copy both field value to a third field which will have geo_point type. I tried doing that but that's not working as intended.

{
  "mappings": {
    "properties": {
      "unique_id": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "location_data": {
        "properties": {
          "latitude": {
            "type": "float",
            "copy_to": "last_location"
          },
          "longitude": {
            "type": "float",
            "copy_to": "last_location"
          },
          "last_location": {
            "type": "geo_point"
          }
        }
      }
    }
  }
}

When I index a sample document such as

{
  "unique_id": "12345_mytest",
  "location_data": {
    "latitude": 37.16,
    "longitude": -124.76
  }
}

You will be able to see in the new mapping that the last_location field which was supposed to be inside location_data object is also populated at root level with a different data type other than geo_point.

{
    "mappings" : {
      "properties" : {
        "last_location" : {
          "type" : "float"
        },
        "location_data" : {
          "properties" : {
            "last_location" : {
              "type" : "geo_point",
              "store" : true
            },
            "latitude" : {
              "type" : "float",
              "copy_to" : [
                "last_location"
              ]
            },
            "longitude" : {
              "type" : "float",
              "copy_to" : [
                "last_location"
              ]
            }
          }
        },
        "unique_id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword"
            }
          }
        }
      }
    }
  }

And furthermore when I query over the field I am unable to get the result as expected.

This doesn't works, any other ideas or way to do that. I know I can do that from the source itself or by altering the data before indexing, but I don't have to luxury to do that right away. Any other way by altering the mapping is most welcome. Thanks in advance for any pointers to get this done.

Thanks Ashit

0 Answers
Related