我在用弹性存储private Map<String, Set<String>>时遇到了问题。
例如,我有一个变量private Map<String, Set<String>> updatedFields,其内容如下:
"updatedFields": {
"key1": [
"val1",
"val2",
"val3"
],
"key2": [
"val1",
"val2",
"val3"
]
}使用模板映射,"updatedFields": {"type": "object"}弹性将为存储的每个键创建自动映射。如果存储了1000多个唯一键,这将导致以下错误:
failure in bulk execution:
[0]: index [md_activity_log_stg_ii], type [_doc], id [969d12df-d2c4-446f-975a-d95e76d6e720], message [ElasticsearchException[Elasticsearch exception [type=mapper_parsing_exception, reason=failed to parse]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Limit of total fields [1000] has been exceeded while adding new fields [1]]];]通过将设置更改为"updatedFields": {"type": "object", "enabled": false},对象将被存储,但不包含数组的任何内容,这是存储后的弹性文档示例:
"updatedFields" : {
"34b49fbb-7ca8-4dc2-8c1f-21f88324b393" : [ ]
},有人知道您如何配置字段,以便在不超过字段限制的情况下正确存储地图?
发布于 2022-09-19 20:54:47
我假设您正在检索JSON并在Java中处理它。确保通过定义POJO来定义或只捕获所需的字段或嵌套字段。没有这一点,ElasticSearch将动态映射插入到映射爆炸中的任何键。
以下是ElasticSearch中可能帮助您解决问题的引用列表:
为objects https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html添加显式映射
增加一个限制以避免映射爆炸https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#mapping-limit-settings
在一般https://www.elastic.co/guide/en/elasticsearch/reference/current/explicit-mapping.html中添加显式映射
https://stackoverflow.com/questions/73727157
复制相似问题