API сопоставлений Elasticsearch не показывает мои списки как вложенный тип - PullRequest
0 голосов
/ 25 мая 2020

Elasti c поиск не распознает мой список объектов как вложенный тип. Я бы хотел, чтобы это происходило автоматически, без необходимости обновлять сопоставление для каждого такого поля. Мне нужен ответ _mappings api, чтобы иметь какой-то идентификатор, который различает свойства, относящиеся к типу списка.

Например: когда я индексирую такой документ в новом тестовом индексе ('mapping_index')

{
    "text":"value",
    "list":[{"a":"b","c":"d"},{"a":"q","c":"f"}]
}

и api сопоставлений попаданий

localhost: 9200 / mapping_index / _mapping

Я получаю

{
    "mapping_index": {
        "mappings": {
            "_doc": {
                "properties": {
                    "list": {
                        "properties": {
                            "a": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            },
                            "c": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            }
                        }
                    },
                    "text": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    }
                }
            }
        }
    }
}

Я бы хотел что-то например,

"type" : "nested"

для ключа «список» в этом ответе, чтобы другая служба, использующая эти поля, хранящиеся в ES, могла сообщить, что этот «список» является многозначным ключом.

I Я читал о шаблонах Dynami c и думаю, что это может мне помочь, но я не совсем уверен (https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html).

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете использовать dynamic_templates

match_mapping_type: «объект» примет любой тип объекта, измените его на вложенный

{
  "mappings": {
    "dynamic_templates": [
      {
        "objects": {
          "match": "*",
          "match_mapping_type": "object",
          "mapping": {
            "type": "nested"
          }
        }
      }
    ]
  }
}

Данные:

{
  "list": [
    {
      "a": "b",
      "c": "d"
    },
    {
      "a": "q",
      "c": "f"
    }
  ]
}

Результат:

 "index80" : {
    "mappings" : {
      "dynamic_templates" : [
        {
          "objects" : {
            "match" : "*",
            "match_mapping_type" : "object",
            "mapping" : {
              "type" : "nested"
            }
          }
        }
      ],
      "properties" : {
        "list" : {
          "type" : "nested",
          "properties" : {
            "a" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "c" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }
  }
}
...