Мы осуществляем модернизацию с эластичного поиска 5.2 до эластичного поиска 6.4.2 и, следовательно, также с Гнезда 5.0.1 до Гнезда 6.4.2.
В 5.0.1 мы могли индексировать данные geoJSON как объект, но Nest 6.4.2 генерирует запрос, содержащий geoJSON без данных.
Мы индексируем поле с географическими данными в формате geoJSON для поля геоформы вasticsearch следующим образом:
В классе GeoDocument:
[Nest.Text(Name = "field1")]
public string Field1 { get; set; }
[Nest.GeoShape(Name = "geometrie")]
public object Geometrie { get; set; }
Данные:
string polygon = "{\"type\":\"Polygon\",\"coordinates\":[[[5.856956,51.002753],[5.856928,51.002771],[5.856687,51.002853],[5.856956,51.002753]]]}";
Сериализация данных в объект:
Geometrie = JsonConvert.DeserializeObject<object>(polygon);
Индексный документ в Nest 5.0.1 (работал нормально):
var response = this.ElasticClient.Index<T>(geoDocument);
Индексный документ в гнезде 6.4.2:
var response = this.ElasticClient.IndexDocument<T>(geoDocument);
Запрос должен быть таким:
{"field1":"correct content","geometrie":{"type":"Polygon","coordinates"::[[[5.856956,51.002753],[5.856928,51.002771],[5.856687,51.002853],[5.856956,51.002753]]]}}
Но Nest генерирует запрос вроде:
{"field1":"correct content","geometrie":{"type":[],"coordinates":[[[[],[]],[[],[]],[[],[]],[[],[]]]]}}
Ответ:
{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse field [geometrie] of type [geo_shape]"}],"type":"mapper_parsing_exception","reason":"failed to parse field [geometrie] of type [geo_shape]","caused_by":{"type":"illegal_state_exception","reason":"Can't get text on a START_ARRAY at 1:673"}},"status":400}
Мы не внедряем SourceSerializerFactory в настройки соединения.