Elasticsearch: можно ли ссылаться на свойства в отображениях? - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть простое сопоставление вasticsearch-6, подобное этому.

{
  "mappings": {
    "_doc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "fields": {
          "properties": {
            "meta": {
              "properties": {
                "task": {
                  "properties": {
                    "field1": {
                      "type": "keyword"
                    },
                    "field2": {
                      "type": "keyword"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Теперь я должен добавить к нему другое свойство - tasks, которое уже является просто массивом свойства taskопределены.

Есть ли способ ссылки на свойства task, чтобы мне не приходилось дублировать все свойства? Что-то вроде:

{
  "fields": {
    "properties": {
      "meta": {
        "properties": {
          "tasks": {
            "type": "nested",
            "properties": "fields.properties.meta.properties.task"
          },
          "task": {
            ...
          }
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 10 ноября 2019

вы уже можете использовать свое поле task в качестве массива task объектов, только вы не можете запрашивать их независимо. Если ваша цель состоит в том, чтобы достичь этого (как я предполагаю из вашего второго примера), я бы напрямую установил «вложенный» тип данных в отображение поля task - тогда, да, вам нужно будет переиндексировать.

Я не могу представить вариант использования, когда вам понадобился бы один и тот же массив объектов, дублированных в двух полях, одно из которых было бы вложенным, а другое - нет.

РЕДАКТИРОВАТЬ

Ниже приведены некоторые соображения / предложения, основанные на обсуждении в комментариях:

  • Одно поле может иметь одно значение илимассив значений. В вашем случае поле вашей задачи может иметь либо один объект задачи, либо массив объектов задачи. Вам следует только позаботиться о настройке «вложенного» типа данных для задачи, если вы планируете запрашивать его объекты независимо (разумеется, если их больше одного)
  • Я бы предложил проектировать ваши документы таким образомчтобы избежать дублирования информации в первую очередь. Дублированная информация сделает ваши документы большими и более сложными для обработки, что приведет к увеличению требований к хранилищу и более медленным запросам
  • Если переопределить сопоставление документов невозможно, вы можете проверить, могут ли псевдонимы типов данных поможет вам избежать некоторых повторений.
  • Если невозможно изменить дизайн документа, вы можете проверить, могут ли динамические шаблоны помочь вам избежать некоторых повторений
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...