如何使用弹性搜索 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"
}
}
}
}
}
}
}
}
}
}
我有下面的映射,想知道如何使用 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"
}
}
}
}
}
}
}
}
}
}