0

我在 Bonsai 上设置了一个 Elasticsearch 集群。我正在使用elasticsearch-rest-high-level-client库来读取存储在 Kafka 中的 Twitter 推文并将它们推送到 Elasticsearch 索引。

我得到以下异常: Exception in thread "main" ElasticsearchStatusException[Elasticsearch exception [type=illegal_argument_exception, reason=Limit of mapping depth [20] in index [twitter] has been exceeded due to object field [THIS CONTAINS ALL OF THE JSON MESSAGE RETRIEVED FROM KAFKA]

看来我的代码正试图将所有消息作为一个字段。可能出了什么问题?

IndexRequest indexRequest = new IndexRequest("twitter").source(jsonMessage, XContentType.JSON); IndexResponse indexResponse = restClient.index(indexRequest, RequestOptions.DEFAULT);

4

1 回答 1

2

此错误与您尝试索引的 Json 的深度有关。默认映射深度 20 表示您尝试索引的 Json 可以具有最多 20 级深度的字段。例如

例如在下面的 json 中,shippingAddress 是 3 层深

{
"order": {
    "orderNo": "test_order",
    "orderDate": "2020-01-01",
    "customer": {
        "customerName": "John Doe",
        "customerPhone": "555-555-5555",
        "shippingAddress": {
            "addressLine1": "test",
            "addressLine2": "test",
            "city": "test",
            "state": "test",
            "country": "test"
        }
    }
}

}

如果可能,请尝试优化您的文档。如果没有,如果确实需要,可以更新设置,

index.mapping.depth.limit - 字段的最大深度,以内部对象的数量来衡量。例如,如果所有字段都在根对象级别定义,则深度为 1。如果有一个对象映射,则深度为 2,以此类推。默认值为 20。

检查文档

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/mapping.html#mapping-limit-settings

于 2020-04-18T22:03:24.097 回答