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.

Другие вопросы по тегам