1

我的课

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:字段必须是 lat/lon 或 geohash

为什么会引发此错误,我该如何解决?

我一直使用 Spring-data 与 Elastic 进行交互,它也有一个 GeoPoint 对象,它在相同的映射下工作得很好,但是因为我删除了 Spring-data,我不得不从 org.springframework.data.elasticsearch.core.geo 切换。 GeoPointorg.elasticsearch.common.geo.GeoPoint

4

1 回答 1

0

我通过不使用 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;
    }
}

我的映射没有改变。

于 2016-04-20T10:35:39.830 回答