我是如何达到 index.mapping.total_fields.limit 的?
How I reached index.mapping.total_fields.limit?
我正在将数据加载到 Elasticsearch 并且我有 index.mapping.total_fields.limit
。我完全不明白为什么会出现此错误,我正在加载到 ES 的 class 看起来像:
@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 个字段 class。
此行为是因为您没有指定 参数 属性 的存储方式。假设,在一个实体中,paraneters 是从“foo”到某些数据的映射。这导致创建以下映射(仅显示相关部分):
{
"article": {
"mappings": {
"properties": {
"parameters": {
"properties": {
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
如果下一个实体有 parameters
从 bar 到某物,则会为“bar”创建一个新的映射条目。一旦地图中的键数超过限制,就会出现该错误。
编辑 2020 年 8 月 3 日:
您可以创建 class Parameter
:
data class Parameter(
val key: String,
val values: List<String>
)
并将Product
中对应的属性改为class为
@Field(type = FieldType.Nested)
val parameters: List<Parameter>
您失去了 Map
拥有的唯一键保证,并且需要在您的代码中的某处进行检查。
就我个人而言,我会在我的应用程序中有一个域层,我会在其中使用 Map
和一个持久层,在其中我使用存储数据所需的特定版本 - 这里有一个 List
.在将数据从域转换到持久层并返回时,我会进行这种转换。
我正在将数据加载到 Elasticsearch 并且我有 index.mapping.total_fields.limit
。我完全不明白为什么会出现此错误,我正在加载到 ES 的 class 看起来像:
@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 个字段 class。
此行为是因为您没有指定 参数 属性 的存储方式。假设,在一个实体中,paraneters 是从“foo”到某些数据的映射。这导致创建以下映射(仅显示相关部分):
{
"article": {
"mappings": {
"properties": {
"parameters": {
"properties": {
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
如果下一个实体有 parameters
从 bar 到某物,则会为“bar”创建一个新的映射条目。一旦地图中的键数超过限制,就会出现该错误。
编辑 2020 年 8 月 3 日:
您可以创建 class Parameter
:
data class Parameter(
val key: String,
val values: List<String>
)
并将Product
中对应的属性改为class为
@Field(type = FieldType.Nested)
val parameters: List<Parameter>
您失去了 Map
拥有的唯一键保证,并且需要在您的代码中的某处进行检查。
就我个人而言,我会在我的应用程序中有一个域层,我会在其中使用 Map
和一个持久层,在其中我使用存储数据所需的特定版本 - 这里有一个 List
.在将数据从域转换到持久层并返回时,我会进行这种转换。