首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是如何到达index.mapping.total_fields.limit的?

我是如何到达index.mapping.total_fields.limit的?
EN

Stack Overflow用户
提问于 2020-08-02 20:02:46
回答 1查看 299关注 0票数 0

我正在将数据加载到Elasticsearch中,我得到了index.mapping.total_fields.limit。我完全不明白为什么会有这个错误,我要加载到ES中的类如下所示:

代码语言:javascript
复制
@Document(type = "article", indexName = "data")
data class Product(
        @Id
        val id: String? = null,
        val category: String,
        val name: String,
        val imagesUrls: List<String>,
        val parameters: Map<String, List<String>>?
)

我已经添加了大约3k的产品,之后我得到了这个错误。你能解释一下为什么我会有这个吗?我以为我的产品类中只有5个字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 20:41:53

这种行为源于这样一个事实,即您没有指定如何存储参数属性。让我们假设,在一个实体中,paraneters是从"foo“到某些数据的映射。这将导致创建以下映射(仅显示相关部分):

代码语言:javascript
复制
{
  "article": {
    "mappings": {
      "properties": {
        "parameters": {
          "properties": {
            "foo": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      }
    }
  }
}

如果下一个实体的parameters从bar到某样东西,就会为"bar“创建一个新的映射条目。一旦地图中的键数超过限制,你就会得到这个错误。

编辑03.08.2020:

您可以创建一个类Parameter

代码语言:javascript
复制
data class Parameter(
    val key: String,
    val values: List<String>
)

并将Product类中的相应属性更改为

代码语言:javascript
复制
@Field(type = FieldType.Nested)
val parameters: List<Parameter>

您将失去Map所拥有的唯一密钥保证,并且需要在代码中的某个地方检查它。

就我个人而言,在我的应用程序中,我会有一个域层,其中我将使用一个Map和一个持久化层,其中我使用了存储数据所需的特定版本-这里有一个List。在将数据从域转换到持久化层和返回时,我将进行此转换。

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

https://stackoverflow.com/questions/63220491

复制
相关文章

相似问题

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