1

我的班級無法在ElasticSearch 1.7.3指數GeoPoints與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的數據與彈性也有一個GeoPoint對象和它工作得很好用相同的映射,但因爲我刪除春季數據,我不得不從 org.springframework.data切換互動.elasticsearch.core.geo.GeoPointorg.elasticsearch.common.geo.GeoPoint

回答

0

我通過不使用彈性的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; 
    } 
} 

我的映射沒有改變。