Как объявить сопоставление для вложенных полей в Elasticsearch, чтобы можно было хранить разные типы? - PullRequest
0 голосов
/ 26 марта 2019

По сути, я хочу, чтобы мое отображение было как можно более бессхемичным, но позволяло бы использовать вложенные типы и возможность хранить данные, которые могут иметь разные типы:

Когда я пытаюсь добавить документ, в котором некоторые поляимеют разные типы значений, я получаю сообщение об ошибке:

"type": "invalid_argument_exception", "reason": "mapper [data.customData.value] другого типа, current_type [long], merged_type[text] "

Эту проблему легко решить, сопоставив значение поля с текстом (или создайте его динамически, сначала вставив документ только с текстом).Тем не менее, я хотел бы избежать схемы.Возможно, все поля, вложенные в customData, будут установлены в текст?Как я могу это сделать?

У меня была проблема ранее, но потом она начала работать после того, как случайно удалось получить динамическое отображение, которое работало (поскольку все рассматривалось как текст. Позже я узнал об этой проблеме, так как мне нужно было изменить отображениечтобы разрешить использование вложенных типов.

Документы с данными такого типа затрудняют хранение:

"customData": [
        {
          "value": "some_text",
          "key": "some_text"
        },
        {
          "value": 0,
          "key": "some_text"
        }
      ]

Часть работающего отображения:

{
    "my_index": {
        "aliases": {},
        "mappings": {
            "_doc": {
                "properties": {
                    "data": {
                        "properties": {
                            "customData": {
                                "properties": {
                                    "key": {
                                        "type": "text",
                                        "fields": {
                                            "keyword": {
                                                "type": "keyword",
                                                "ignore_above": 256
                                            }
                                        }
                                    },
                                    "value": {
                                        "type": "text",
                                        "fields": {
                                            "keyword": {
                                                "type": "keyword",
                                                "ignore_above": 256
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "some_list": {
                        "type": "nested",
                        "properties": {
                            "some_field": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

В сущности, я хочу, чтобы отображение было как можно более бессхемичным, но позволяло бы использовать вложенные типы и иметь возможность хранить данные, которые могут иметь различные типы:

{
  "mappings": {
    "_doc": {
      "properties": {
        "data": {
          "type": "object"
        },
        "somee_list": {
          "type": "nested" 
        }
      }
    }
  }
}

Так что будет лучшим подходом для этого?это проблема?

...