asticsearch: невозможно установить значение geo_shape с помощью XContentBuilder
У меня есть следующее отображение в упругом поиске. Я могу ставить документы, используя плагин Sense, но не могу сделать это, используя XContentBuilder для установки значения поля geo_shape. Я получаю следующую ошибку:
ошибка:
[106]: index [streets], type [street], id [{dc872755-f307-4c5e-93f6-bba9c95791c7}], message [MapperParsingException[failed to parse [shape]]; nested: ElasticsearchParseException[shape must be an object consisting of type and coordinates];]
отображение:
PUT /streets
{
"mappings": {
"street": {
"properties": {
"id": {
"type": "string"
},
"shape": {
"type": "geo_shape",
"tree": "quadtree"
}
}
}
}
}
код:
val bulkRequest:BulkRequestBuilder = esClient.prepareBulk()
//inloop
xb = jsonBuilder().startObject()
xb.field("id", guid)
xb.field("shape", jsonString) // removing this line creates the index OK but without the geo_shape
xb.endObject()
bulkRequest.add(esClient.prepareIndex("streets", "street", guid).setSource(xb))
//end loop
val bulkResponse:BulkResponse = bulkRequest.execute().actionGet()
if(bulkResponse.hasFailures){
println(bulkResponse.buildFailureMessage())
}
jsonString:
{
"id": "{98b8fd8d-074c-4349-a83b-6e892bf2d0ef}",
"shape": {
"type": "LineString",
"coordinates": [
[-70.81866815832467, 43.12187109162505],
[-70.83054813653018, 43.15917412985851],
[-70.81320737213957, 43.23522269547419],
[-70.90108590067649, 43.28102004268419]
],
"crs": {
"type": "name",
"properties": {
"name": "EPSG:4326"
}
}
}
}
Цените любые отзывы?
Спасибо
1 ответ
Возможно, для вас это немного поздно, но это может помочь кому-то, кто сталкивается с подобной проблемой даже сейчас.
После сопоставления индекса для документа у нас есть следующие свойства:
id
а также
shape
.
В вашем сообщении об ошибке описано, что:
shape должен быть объектом, состоящим из типа и координат
Итак, для вашего конкретного случая
crs
массив просто не принимается (точно не знаю, почему нельзя добавлять дополнительные параметры).
Это пример того, как добавить документ в
streets
индекс с использованием CURL:
curl -X POST "localhost:9200/streets/_doc?pretty" -H 'Content-Type: application/json' -d '
{
"id": 123,
"shape": {
"type": "Polygon",
"coordinates": [
[
[
32.85444259643555,
39.928694653732364
],
[
32.847232818603516,
39.9257985682691
],
[
32.837791442871094,
39.91947941109337
],
[
32.837276458740234,
39.91579296675271
],
[
32.85392761230469,
39.913423004886894
],
[
32.86937713623047,
39.91329133793421
],
[
32.88036346435547,
39.91539797880347
],
[
32.85444259643555,
39.928694653732364
]
]
]
}
}'
Если вам нужно добавить
LineString
вместо
Polygon
, просто измените атрибут 'type' на 'shape'.
Я надеюсь, что это поможет людям добавлять документы с фигурами в базу данных ElasticSearch.