У меня есть следующая схема для индекса с именем '
{
"mappings": {
"my_type": {
"properties": {
"name": {
"type" : "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"tags": {
"type": "nested",
"dynamic": "true"
}
}
}
}
}
Поле тегов принимает пары ключ-значение в качестве значения.Что-то в следующем формате:
{
"name": "proj2",
"tags": {
"Key-1": "Val-1",
"Key-2": "Val-2"
}
}
Проблема этого подхода заключается в том, что число полей для индекса увеличивается всякий раз, когда появляются уникальные ключи (так как они добавляются в качестве полей в индекс).Ограничение по умолчанию для числа полей для индекса составляет 1000, что достигается увеличением числа уникальных ключей.
Увеличение значения ограничения по умолчанию приведет к проблемам с производительностью, о чем говорится в этом документе - https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#mapping-limit-settings
Другой способ - создать статическое отображение следующим образом:
{
"mappings": {
"my_type": {
"properties": {
"name": {
"type" : "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"tags": {
"type": "nested",
"dynamic": "false"
"properties": {
"key": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
}
}
}
}
}
Но приведенное выше разделит ключи и значения.Это не то, что я хочу.
Есть ли способ сохранить значения в виде пар ключ-значение с динамическим значением false?