gpt4 book ai didi

mapping - 内部对象的 XContentBuilder Elasticsearch 映射

转载 作者:行者123 更新时间:2023-11-29 02:48:02 26 4
gpt4 key购买 nike

我正在尝试为以下结构的文档创建映射:

"name":"Peter"
"id":"ABC123",
"values":{
"a":3.0123,
"b":1234
}

所以映射应该是这样的:

{
"properties":{"_all":{"enabled":"false"},
"dynamic":"false",
"_timestamp":{"enabled":true,"store":true},
"properties": {
"name":{"type":"string"},
"id":{"type":"string"},
"values": {
"properties": {
"a": {"type":"double"},
"b":{"type":"double"}
}
}
}
}
}

实际上,“值”中可能的属性数量相当大,比方说我必须在其中包含 50 个可能的属性..

我目前正在使用 XContentBuilder 生成映射 json,这对我来说非常有用。

我想要做的是,将内部部分的映射封装在一个单独的构建器中的“值”中,因为它使映射过程对我来说更容易维护。此外,我已经在列表中有了内部属性的名称,我想对其进行迭代。

这是我的普通映射代码。

XContentBuilder xbMapping = jsonBuilder()
.startObject() // start root
.startObject(PROPERTIES)
.startObject("_all").field("enabled", "false").endObject()
.field("dynamic", "false")
.startObject("_timestamp").field("enabled", true).field("store", true).endObject()
.startObject(PROPERTIES)
.startObject("name").field("type", "string").endObject()
.startObject("id").field("type", "string").endObject()
.startObject("values")
.startObject(PROPERTIES)
// INNER MAPPING HERE!!
.endObject()
.endObject()
.endObject()
.endObject();

我想避免在那些 startObject 和 endObject 之间进行迭代,更喜欢在其他地方为内部类型做完整的映射,然后只在那里包含额外的部分。

目前我找不到使用 XContentBuilder 的复杂方法。

感谢任何提示

最佳答案

XContentBuilder 随每次方法调用而变化,构建器模式只是为了方便。所以你可以随时中断链式调用

private void buildValues(XContentBuilder builder) throws IOException {
String[] values = {"a", "b"};
for (String value : values) {
builder.startObject(value).field("type", "double").endObject();
}
}


XContentBuilder xbMapping = jsonBuilder()
.startObject() // start root
.startObject(PROPERTIES)
.startObject("_all").field("enabled", "false").endObject()
.field("dynamic", "false")
.startObject("_timestamp").field("enabled", true).field("store", true).endObject()
.startObject(PROPERTIES)
.startObject("name").field("type", "string").endObject()
.startObject("id").field("type", "string").endObject()
.startObject("values")
.startObject(PROPERTIES);

buildValues(xbMapping);

xbMapping
.endObject()
.endObject()
.endObject()
.endObject();

关于mapping - 内部对象的 XContentBuilder Elasticsearch 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088966/

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