gpt4 book ai didi

java - ElasticSearch 映射动态模板 Java

转载 作者:行者123 更新时间:2023-12-01 06:01:50 25 4
gpt4 key购买 nike

我正在尝试使用 RestHighLevelClient 创建弹性动态模板。 getMapping() 中注释掉的代码片段用于有效的静态映射。但是,我在尝试创建动态映射时遇到了问题。

我的目的是将任何以 _id 结尾的属性视为 long,并将任何以 _message 结尾的属性视为文本。

有人可以指出我做错了什么吗?

":{"root_cause":[{"type":"class_cast_exception","re​​ason":"class_cast_exception: java.util.LinkedHashMap 无法转换为 java.util.List"}],"type ":"mapper_parsing_exception","re​​ason":"无法解析映射 [_doc]: java.util.LinkedHashMap 无法转换为 java.util.List","caused_by":{"type":"class_cast_exception","re​​ason ":"class_cast_exception: java.util.LinkedHashMap 无法转换为 java.util.List"}},"status":400}

我的代码片段:

主要方法:

CreateIndexRequest request = new CreateIndexRequest(indexName);
request.settings(Settings.builder()
.put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2)
);

request.mapping("_doc", getMapping());
CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);

辅助方法:

private static XContentBuilder getMapping() throws IOException {

XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("_doc")
.startObject("dynamic_templates")
.startObject("id")
.field("match", "*_id")
.field("match_mapping_type", "long")
.endObject()
.startObject("message")
.field("match", "*_message")
.field("match_mapping_type", "string")
.endObject()
.endObject()
.endObject()
.endObject();

/*XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("_doc")
.startObject("properties")
.startObject("user")
.field("type", "text")
.field("index", true)
.endObject()
.startObject("message")
.field("type", "text")
.field("index", true)
.endObject()
.endObject()
.endObject()
.endObject();*/

return mappingBuilder;
}

引用指南:https://www.elastic.co/guide/en/elasticsearch/guide/master/custom-dynamic-mapping.html

最佳答案

动态模板是数组。例如,Elasticsearch 7.1.0

private XContentBuilder buildDynamicTemplates() throws IOException {
XContentBuilder dynamicTemplate = XContentFactory.jsonBuilder();
dynamicTemplate.startObject();
{
dynamicTemplate = DynamicTemplateFactory.templateBuilder(dynamicTemplate);
}
dynamicTemplate.endObject();
return dynamicTemplate;
}

private static XContentBuilder builderTemplate() throws IOException {
XContentBuilder dynamicTemplate = XContentFactory.jsonBuilder();
dynamicTemplate.startObject();
dynamicTemplate.startArray("dynamic_templates");
{
dynamicTemplate.startObject();
{
dynamicTemplate.startObject("strings_as_keywords");
{
dynamicTemplate.field("match", "*");
dynamicTemplate.field("match_mapping_type", "string");
dynamicTemplate.startObject("mapping");
{
dynamicTemplate.field("type", "keyword");
}
dynamicTemplate.endObject();
}
dynamicTemplate.endObject();
}
dynamicTemplate.endObject();
}
dynamicTemplate.endArray();
dynamicTemplate.endObject();
return dynamicTemplate;
}

关于java - ElasticSearch 映射动态模板 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56250123/

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