Такое поведение происходит из-за того, что вы не указываете, как должно храниться свойство parameters . Предположим, что в одном объекте paraneters - это карта от "foo" к некоторым данным. Это приводит к созданию следующих сопоставлений (показывающих только соответствующую часть):
{
"article": {
"mappings": {
"properties": {
"parameters": {
"properties": {
"foo": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
Если у следующего объекта было parameters
от 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
, и уровень сохранения, где я использую версию c, необходимую для хранения данных - здесь с а List
. И при преобразовании данных из домена в уровень сохраняемости и обратно я бы сделал это преобразование.