1

Мой классНевозможно индексировать 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; 
    } 
} 

Мой Mapping

{ 
    "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

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

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

ответ

0

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

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; 
    } 
} 

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