gpt4 book ai didi

java - 使用 Java API 获取映射中每个字段的类型(String、Boolean、Int、Nested 等)

转载 作者:行者123 更新时间:2023-12-01 12:46:43 24 4
gpt4 key购买 nike

我想使用 java API 获取映射中所有字段的类型。

这样我就可以检索所有字段:

ClusterState cs = Client.admin().cluster().prepareState().execute().actionGet().getState();
IndexMetaData imd = cs.getMetaData().index(customerName);
MappingMetaData mmd = imd.mapping(type);
Map<String, Object> source = mmd.sourceAsMap();
for (String i : source.keySet()) {
JSONObject jsonSource = null;
try {
jsonSource = new JSONObject(source.get(i).toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Iterator<?> iterator = jsonSource.keys();
while (iterator.hasNext()) {
listFields.add(iterator.next().toString());
}

}

我在 MappingMetaData 中查找了方法,但没有找到任何可以提供字段类型的信息(例如:字符串、 float 、整数等)。我需要在字段列表中仅重新获取核心类型(不包含嵌套或内部对象)

最佳答案

您可以使用 Jackson 的 JsonNode:

MappingMetaData mmd = imd.mapping(type);
CompressedString source = mmd.source();
JsonNode mappingNode = new ObjectMapper().readTree(source));

JsonNode propertiesNode = mappingNode.get("properties");
Iterator<Entry<String, JsonNode>> properties = propertiesNode.fields();
while (properties.hasNext()) {

Entry<String, JsonNode> node = properties.next();
String name = node.getKey();
JsonNode valueNode = node.getValue();
if (valueNode != null) {
String type = valueNode.get("type").asText();//gives you the type
}
}

关于java - 使用 Java API 获取映射中每个字段的类型(String、Boolean、Int、Nested 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com