![](/img/trans.png)
[英]Dynamic mapping and nested sorting on dates in ElasticSearch/Java
[英]ElasticSearch Mapping Dynamic Template Java
我正在尝试使用 RestHighLevelClient 为弹性创建动态模板。 getMapping()
注释掉的代码片段是用于静态映射的。 但是,我在尝试创建动态映射时遇到了问题。
我的意图是将任何以_id
结尾的属性视为长,并将以_message
结尾的任何属性视为文本。
有人可以指出我做错了什么吗?
":{"root_cause":[{"type":"class_cast_exception","reason":"class_cast_exception: java.util.LinkedHashMap cannot be cast to java.util.List"}],"type":"mapper_parsing_exception","reason":"Failed to parse mapping [_doc]: java.util.LinkedHashMap cannot be cast to java.util.List","caused_by":{"type":"class_cast_exception","reason":"class_cast_exception: java.util.LinkedHashMap cannot be cast to 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.