如何使用弹性搜索 RestHighLevelClient 在 java 中编写 json 映射?

How to write json mapping in java using elastic search RestHighLevelClient?

我有下面的映射,想知道如何使用 RestHighLevelClient

在 java 中编写相同的映射
{
  "mappings": {
    "properties": {
      "events": {
        "type": "nested",
        "properties": {
          "ecommerceData": {
            "type": "nested",
            "properties": {
              "comments": {
                "type": "nested",
                "properties": {
                  "recommendationType": {
                    "type": "keyword"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

创建(嵌套)的最简单方法是将此映射放在文件中的 JSON format 中,然后以字符串格式读取它(提供实用程序方法)并创建如下所示的映射:

其他方式在this官方文档中提到

创建一个名为 nested.mapping 的文件,我将使用 nested 作为索引名称。

使用以下实用方法读取文件并return以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 代码使用上述实用方法创建索引

 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结果,显示索引创建成功。

{
  "nested": {
    "aliases": {

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