 geo_point field does not support GeoJson which can be a PITA if your data is in such a format. Indexing it as a geo_shape is an option but very wasteful.
server/src/main/java/org/elasticsearch/common/geo/GeoUtils.java
if (element == 1) {
                            lon = subParser.doubleValue();
                        } else if (element == 2) {
                            lat = subParser.doubleValue();
                        } else if (element == 3) {
                            GeoPoint.assertZValue(ignoreZValue, subParser.doubleValue());
                        } else {
                            throw new ElasticsearchParseException("[geo_point] field type does not accept > 3 dimensions");
                        }
                    } else {
                        throw new ElasticsearchParseException("numeric value expected");
                    }
                }
            }
            return point.reset(lat, lon);
        } else if (parser.currentToken() == Token.VALUE_STRING) {
            String val = parser.text();
            return point.resetFromString(val, ignoreZValue, effectivePoint);
        } else {
            throw new ElasticsearchParseException("geo_point expected");
        }
    }
    /**
     * Parse a {@link GeoPoint} from a string. The string must have one of the following forms:
     *
     * <ul>
     *     <li>Latitude, Longitude form: <pre>&quot;<i>&lt;latitude&gt;</i>,<i>&lt;longitude&gt;</i>&quot;</pre></li>
     *     <li>Geohash form:: <pre>&quot;<i>&lt;geohash&gt;</i>&quot;</pre></li>
     * </ul>
     *