Я недавно работаю с Elasticsearch и у меня такой вопрос.Я хочу вставить географическую точку в Elasticsearch.Я пытаюсь сделать это через карту, например:
@Override
public BulkRequest buildRequest(GeoLocationModelWrapper args) {
final BulkRequest bulkRequest = new BulkRequest();
args.getGeoLocationModels().forEach(geoLocationModel -> {
final Map<String, Object> jsonMap = toJsonMap(geoLocationModel);
final IndexRequest indexRequest = new IndexRequest("geo_object").source(jsonMap);
bulkRequest.add(indexRequest);
});
bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
return bulkRequest;
}
private Map<String, Object> toJsonMap(GeoLocationModel geoLocationModel) {
final Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put(GeoLocationModelFieldName.LOCATION.name(), geoLocationModel.getLocation());
return jsonMap;
}
Моя сущность:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GeoLocationModel {
@GeoPointField
private GeoPoint location;
}
Но когда я пытаюсь получить очки по расстоянию запроса.У меня такая ошибка:
{
"error": {
"root_cause": [
{
"type": "query_shard_exception",
"reason": "failed to find geo_point field [location]",
"index_uuid": "QaRgTueqQMijb-QG4rSgug",
"index": "geo_object"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "geo_object",
"node": "jpAOoOZ2SC6wSPWzqX8wsg",
"reason": {
"type": "query_shard_exception",
"reason": "failed to find geo_point field [location]",
"index_uuid": "QaRgTueqQMijb-QG4rSgug",
"index": "geo_object"
}
}
]
},
"status": 400
}
Запрос, который я отправляю:
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
Отображение индекса:
{
"geo_object": {
"aliases": {},
"mappings": {
"properties": {
"location": {
"properties": {
"lat": {
"type": "float"
},
"lon": {
"type": "float"
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1569414315310",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "iUzjs761So2In8RKulcqLA",
"version": {
"created": "7030299"
},
"provided_name": "geo_object"
}
}
}
}
Как вставитьГеографически правильно указать Elasticsearch через Java?