Невозможно проиндексировать GeoPoints в ElasticSearch 1.7.3 с помощью Java API

Мои занятия

package be.smartask.data;

import be.smartask.core.api.Language;
import org.elasticsearch.common.geo.GeoPoint;

import java.util.Date;
import java.util.Map;

/**
 * @author Glenn Van Schil
 *         Created on 26/01/2016
 */
public class CityValue extends Value {
    private int radius;
    private Map<Language, String> translations;
    private GeoPoint geoPoint;
    private Suggest suggest;

    public CityValue() {
    }

    public CityValue(Date createdOn, String id, Date lastUpdatedOn, String fieldId, String projectId, String userId, GeoPoint geoPoint, int radius, Suggest suggest, Map<Language, String> translations) {
        super(createdOn, id, lastUpdatedOn, fieldId, projectId, userId);
        this.geoPoint = geoPoint;
        this.radius = radius;
        this.suggest = suggest;
        this.translations = translations;
    }

    public GeoPoint getGeoPoint() {
        return geoPoint;
    }

    public void setGeoPoint(GeoPoint geoPoint) {
        this.geoPoint = geoPoint;
    }

    public void setGeoPoint(double lat, double lon) {
        this.geoPoint = new GeoPoint(lat, lon);
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }

    public Suggest getSuggest() {
        return suggest;
    }

    public void setSuggest(Suggest suggest) {
        this.suggest = suggest;
    }

    public Map<Language, String> getTranslations() {
        return translations;
    }

    public void setTranslations(Map<Language, String> translations) {
        this.translations = translations;
    }
}

Моя карта

{
    "cityvalue": {
        "dynamic_templates": [{
            "notanalyzed": {
                "match": "*",
                "match_mapping_type": "string",
                "mapping": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }],
        "properties": {
            "createdOn": {
                "type": "date",
                "format": "date_hour_minute_second"
            },
            "lastUpdatedOn": {
                "type": "date",
                "format": "date_hour_minute_second"
            },
            "suggest": {
                "type": "completion",
                "preserve_separators": false,
                "index_analyzer": "simple",
                "search_analyzer": "simple",
                "payloads": false
            },
            "geoPoint": {
                "type": "geo_point"
            }
        }
    }
}

Когда я пытаюсь проиндексировать этот объект, я получаю следующую ошибку

org.elasticsearch.ElasticsearchParseException: поле должно быть либо широтой / долготой, либо геохешем.

Почему возникает эта ошибка и как ее решить?

Я всегда использовал Spring-data для взаимодействия с Elastic, у которого также был объект GeoPoint, и он отлично работал с тем же отображением, но поскольку я удалил Spring-data, мне пришлось переключиться с org.springframework.data. elasticsearch.core.geo.GeoPoint на org.elasticsearch.common.geo.GeoPoint


person Glenn Van Schil    schedule 19.04.2016    source источник


Ответы (1)


Я решил это, не используя объект Elastic GeoPoint. Я создал следующий объект и заменил все использования Elastic GeoPoint своим объектом.

package be.smartask.core.api.data;

/**
 * @author Glenn Van Schil
 *         Created on 20/04/2016
 */
public class GeoPoint {
    double lat, lon;

    public GeoPoint() {
    }

    public GeoPoint(double lat, double lon) {
        this.lat = lat;
        this.lon = lon;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public double getLon() {
        return lon;
    }

    public void setLon(double lon) {
        this.lon = lon;
    }
}

Мое отображение не изменилось.

person Glenn Van Schil    schedule 20.04.2016