Как написать json отображение в java, используя elasti c search RestHighLevelClient? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть приведенное ниже отображение, и мне интересно, как написать такое же отображение в java с помощью RestHighLevelClient

{
  "mappings": {
    "properties": {
      "events": {
        "type": "nested",
        "properties": {
          "ecommerceData": {
            "type": "nested",
            "properties": {
              "comments": {
                "type": "nested",
                "properties": {
                  "recommendationType": {
                    "type": "keyword"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 11 апреля 2020

Самый простой способ создать (как вложенный) - поместить это отображение в 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.

debugger code image

И, наконец, результат API отображения Elasti c, который показывает успешно созданный индекс.

{
  "nested": {
    "aliases": {

    },
    "mappings": {
      "properties": {
        "events": {
          "type": "nested",
          "properties": {
            "ecommerceData": {
              "type": "nested",
              "properties": {
                "comments": {
                  "type": "nested",
                  "properties": {
                    "recommendationType": {
                      "type": "keyword"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
}
...