Как правильно вставить GeoPoint в Elasticsearch? - PullRequest
0 голосов
/ 25 сентября 2019

Я недавно работаю с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...