Моим приложением является Spring-загрузка сasticsearch,
@Document(indexName = "mtile",type = "tile")
class Tile
{
@Id
private String tileId;
private String country;
private GeoPolygon location;
}
@PostMapping(value ="insertTiles/{tileFile}/{country}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String insertTiles(@PathVariable(name = "tileFile", required = true) MultipartFile tileFile,
@PathVariable(name = "country", required = true) String country) throws IOException {
File file= FileUtils.getLocalCopyOfFile(tileFile) ;
tileService.insertTile(file,country);
FileUtils.deleteLocalCopyOfFile(file);
return "Inserted";
}
public void insertTile(File file, String country) {
try {
List<Tile> mortonTilesList=new ArrayList<>();
List<String> tilesList = Files.readAllLines(Paths.get(file.getAbsolutePath()));
tilesList.forEach(s -> {
String[] str=s.split(",");
LinkedHashSet countryset=new LinkedHashSet();
countryset.add(country);
MortonTile mTile= MortonTile.fromMortonHex(str[0]);
GeoPolygon polygon=GeoPolygonFactory.makeGeoPolygon(PlanetModel.WGS84,getGeoPoints(mTile));
Tile tile = new Tile(mTile.getMortonHex(), country, polygon);
mortonTilesList.add(tile);
});
tileRepository.saveAll(mortonTilesList);
} catch (IOException e) {
e.printStackTrace();
}
}
При упругом поиске данные вставляются правильно, но при получении ошибки получения Невозможно создать экземпляр org.apache.lucene.spatial3d.geom.GeoPolygon (нет создателей, как и конструкция по умолчанию, существует)
@GetMapping(value = "/getTilesByCountry/{country}")
public List<Tile> getTilesByCountry(@PathVariable(name = "country", required = true) String country) {
return tileService.findByCountry(country);
}
Реализация:
public List<Tile> findByCountry(String country) {
return tileRepository.findByCountry(country);
}
Репозиторий:
@EnableElasticsearchRepositories
public interface TileRepository extends ElasticsearchRepository<Tile, String> {
Tile findByTileId(String tileId);
List<Tile> findByCountry(String country);
}