首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在弹性搜索中以集合为值存储地图

在弹性搜索中以集合为值存储地图
EN

Stack Overflow用户
提问于 2022-09-15 07:28:18
回答 1查看 38关注 0票数 0

我在用弹性存储private Map<String, Set<String>>时遇到了问题。

例如,我有一个变量private Map<String, Set<String>> updatedFields,其内容如下:

代码语言:javascript
复制
  "updatedFields": {
    "key1": [
      "val1",
      "val2",
      "val3"
    ],
    "key2": [
      "val1",
      "val2",
      "val3"
    ]
  }

使用模板映射,"updatedFields": {"type": "object"}弹性将为存储的每个键创建自动映射。如果存储了1000多个唯一键,这将导致以下错误:

代码语言:javascript
复制
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},对象将被存储,但不包含数组的任何内容,这是存储后的弹性文档示例:

代码语言:javascript
复制
"updatedFields" : {
      "34b49fbb-7ca8-4dc2-8c1f-21f88324b393" : [ ]
 },

有人知道您如何配置字段,以便在不超过字段限制的情况下正确存储地图?

EN

回答 1

Stack Overflow用户

发布于 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中添加显式映射

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73727157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档