1

У меня есть elasticsearch сущность весной, как показано ниже:GeoPoint с Spring Data ElasticSearch дает ошибку: QueryParsingException [поле [место] не geo_point поле]

@Document(indexName = "cities_in", type = "cities") 
public class CityDocument { 

@Id 
private String id; 

@Field(type = FieldType.String) 
private String city; 

@Field(type = FieldType.Object) 
@GeoPointField 
private GeoPoint location; 
} 

, но когда я вижу картирование с использованием локон curl -s -XGET 'http://localhost:9200/cities_in/cities/_mapping?pretty=1' я получаю выход как:

{ 
    "cities_in" : { 
    "mappings" : { 
    "cities" : { 
     "properties" : { 
     "city" : { 
      "type" : "string" 
     }, 
     "id" : { 
     "type" : "string" 
     }, 
     "location" : { 
     "properties" : { 
      "geohash" : { 
      "type" : "string" 
      }, 
      "lat" : { 
      "type" : "double" 
      }, 
      "lon" : { 
      "type" : "double" 
      } 
     } 
     } 
     } 
    } 
    } 
} 
} 

и когда попал я запрашиваю я получаю ниже ошибки:

{ 
"error" : { 
"root_cause" : [ { 
    "type" : "query_parsing_exception", 
    "reason" : "No query registered for [geo_point]", 
    "index" : "cities_in", 
    "line" : 1, 
    "col" : 33 
} ], 
"type" : "search_phase_execution_exception", 
"reason" : "all shards failed", 
"phase" : "query", 
"grouped" : true, 
"failed_shards" : [ { 
    "shard" : 0, 
    "index" : "cities_in", 
    "node" : "4jGBH3m4SkqNnBwC196hTw", 
    "reason" : { 
    "type" : "query_parsing_exception", 
    "reason" : "No query registered for [geo_point]", 
    "index" : "cities_in", 
    "line" : 1, 
    "col" : 33 
    } 
} ] 
    }, 
    "status" : 400 
} 

Зачем нужен тип местоположения не geo_point? Как управлять геоинформацией с помощью sprin?

ответ

3

Если вы используете Spring, убедитесь, что вы используете тат GeoPoint с весны

org.springframework .data.elasticsearch.core.geo.GeoPoint

2

Проблема заключается в том, что поля FieldType.Object обрабатываются до @GeoPointField от Spring Data's MapperBuilder.

Так что вам просто нужно удалить @Field(type = FieldType.Object) аннотацию и просто объявить location поле, как это:

@GeoPointField 
private GeoPoint location; 
+0

По-прежнему его рабочая пружина не создает тип поля «geo_point». Если я добавляю отображение с помощью curl, а затем добавляя/получая данные с весны, он работает. Может быть весной, не поддерживающей тип поля «geo_point» –

+0

Какую версию данных Spring вы используете? Удалили ли вы индекс до перезапуска приложения Spring? – Val

+0

Спасибо большое, его работа сейчас. Я использовал класс GeoPoint «org.elasticsearch.common.geo.GeoPoint» вместо «org.springframework.data.elasticsearch.core.geo.GeoPoint». –

Смежные вопросы