Есть много вещей, которые нужно знать о картировании Elasticsearch.Я действительно настоятельно рекомендую сначала прочитать хотя бы некоторые из их документации .
Короткие ответы, если вам все равно:
- Elasticsearch автоматически позволяет хранить одно или несколько значений определенных объектов, нет необходимости указывать массив.См. Маркер 1 или обратитесь к их документации по типам массивов .
- Я не думаю, что это так.Поскольку Elasticsearch 6 разрешен только 1 тип на индекс.Вложенные объекты, вероятно, самые близкие, но вы определяете их в одном файле.Вложенные объекты хранятся в отдельном индексе (внутри).
Длинный ответ и некоторые мысли
Посмотрите на следующее отображение:
"mappings": {
"doc": {
"properties": {
"location": {
"properties": {
"timestamp": {
"type": "date"
},
"resources": { [1]
"type": "nested", [2]
"properties": {
"resource": {
"properties": {
"name": { [3]
"type": "text"
}
}
},
"probability": {
"type": "float"
}
}
}
}
}
}
}
}
Так может выглядеть ваше отображение.Это может быть сделано по-другому, но я думаю, что это имеет смысл таким образом - возможно, за исключением маркера 3. Я подойду к этому прямо сейчас:
Маркер 1: Если вы определите поле,Вы обычно даете это тип.Я определил resources
как тип nested
, но ваш timestamp
имеет тип date
.Elasticsearch автоматически позволяет хранить одно или несколько значений этих объектов.timestamp
может также содержать массив dates
, не нужно указывать массив .
Маркер 2: Я определил resources
кактип nested
, но это также может быть объект типа resource
чуть ниже (где тип не указан).Читайте о вложенных объектах здесь .В конце концов, я не знаю, как будут выглядеть ваши запросы, поэтому не уверен, действительно ли вам нужен вложенный тип.
Маркер 3: Я хочу рассмотреть две вещи здесь.Во-первых, я хочу еще раз упомянуть, что resource
определяется как обычный объект со свойством name
.Вы могли бы сделать это и для resources
.
Второе - это скорее наводящий на размышления импульс: не принимайте это слишком серьезно, если что-то абсолютно не соответствует вашему случаю.Просто примите это как мнение.
Эта структура отображения выглядит очень вдохновленной подходом реляционных баз данныхЯ думаю, что вы обычно хотите определить структуры документа для эластичного поиска больше для ожидаемых поисков.Избыточность не является проблемой, но вложенные объекты могут усложнить ваши запросы.Я думаю, что я опустил бы всю часть ресурсов и сделал бы что-то вроде этого:
"mappings": {
"doc": {
"properties": {
"location": {
"properties": {
"timestamp": {
"type": "date"
},
"resource": {
"properties": {
"resourceName": {
"type": "text"
}
"resourceProbability": {
"type": "float"
}
}
}
}
}
}
}
}
Потому что, как я сказал, в этом случае resource
может содержать массив объектов, каждый из которых имеет resourceName
иresourceProbability
.