Самый простой способ создать (как вложенный) - поместить это отображение в JSON format
в файле, а затем прочитать его в строковом формате (предоставленные служебные методы) и создать отображение, как показано ниже:
Другие способы упомянуты в этом официальном c.
Создайте файл с именем nested.mapping
, и я буду использовать nested
в качестве имени индекса.
Используйте следующий метод утилиты, чтобы прочитать файл и вернуть его в string
формате
public String getStringFromFile(String fileName) throws IOException {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
InputStream in = classLoader.getResourceAsStream(fileName); --> file name
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
return result.toString(StandardCharsets.UTF_8.name());
}
Resthighlevelclient code для создания индекса с использованием вышеуказанного метода утилиты
if (!isIndexExist(client, indexName)) {
JsonUtil jsonUtil = new JsonUtil();
String indexString = jsonUtil.getStringFromFile(indexName + ".mapping");
CreateIndexRequest request = new CreateIndexRequest(indexName);
request.source(indexString, XContentType.JSON);
client.indices().create(request, RequestOptions.DEFAULT);
}
Пожалуйста, посмотрите мой java снимок экрана отладчика, который правильно читает этот файл в формате JSON
.
И, наконец, результат API отображения Elasti c, который показывает успешно созданный индекс.
{
"nested": {
"aliases": {
},
"mappings": {
"properties": {
"events": {
"type": "nested",
"properties": {
"ecommerceData": {
"type": "nested",
"properties": {
"comments": {
"type": "nested",
"properties": {
"recommendationType": {
"type": "keyword"
}
}
}
}
}
}
}
}
}
}