Elasticsearch - добавить записи пары ключ-значение в качестве значений в одно из полей - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующая схема для индекса с именем '

{
    "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?

1 Ответ

0 голосов
/ 04 февраля 2019

У меня работала следующая схема:

{
    "mappings": {
        "my_type": {
            "properties": {
                "name": { 
                    "type" : "text", 
                    "fields": { 
                        "keyword": {
                            "type": "keyword", 
                            "ignore_above": 256 
                        } 
                    }
                },
                "tags": {
                    "type": "nested",
                    "dynamic": "false"
                }
            }
        }
    }
}

Это гарантирует, что данные хранятся в источнике, но не индексируются, следовательно, не добавляются к количеству полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...