我正在将数据加载到Elasticsearch中,我得到了index.mapping.total_fields.limit。我完全不明白为什么会有这个错误,我要加载到ES中的类如下所示:
@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个字段。
发布于 2020-08-02 20:41:53
这种行为源于这样一个事实,即您没有指定如何存储参数属性。让我们假设,在一个实体中,paraneters是从"foo“到某些数据的映射。这将导致创建以下映射(仅显示相关部分):
{
"article": {
"mappings": {
"properties": {
"parameters": {
"properties": {
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}如果下一个实体的parameters从bar到某样东西,就会为"bar“创建一个新的映射条目。一旦地图中的键数超过限制,你就会得到这个错误。
编辑03.08.2020:
您可以创建一个类Parameter
data class Parameter(
val key: String,
val values: List<String>
)并将Product类中的相应属性更改为
@Field(type = FieldType.Nested)
val parameters: List<Parameter>您将失去Map所拥有的唯一密钥保证,并且需要在代码中的某个地方检查它。
就我个人而言,在我的应用程序中,我会有一个域层,其中我将使用一个Map和一个持久化层,其中我使用了存储数据所需的特定版本-这里有一个List。在将数据从域转换到持久化层和返回时,我将进行此转换。
https://stackoverflow.com/questions/63220491
复制相似问题