try {
PutIndexTemplateRequest request = new PutIndexTemplateRequest(“ubi_index_template”)
List indexPatterns = new ArrayList();
indexPatterns.add(“ubi*”);
request.patterns(indexPatterns);
/** mapping */
XContentBuilder jsonBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject(“_source”)
.field(“enabled”, false)
.endObject()
.startObject(“properties”)
.startObject(“host_name”)
.field(“type”, “keyword”)
.endObject()
.startObject(“created_at”)
.field(“type”, “date”)
.field(“format”, “yyyy-MM-dd HH:mm:ss”)
.endObject()
.endObject()
.endObject();
request.mapping(“_doc”, jsonBuilder);
Map<String, Object> settings = new HashMap<>();
settings.put(“number_of_shards”, 1);
request.settings(settings);
System.out.println(client.indices().putTemplate(request, RequestOptions.DEFAULT));
} catch (Exception e) {
// TODO: handle exception
} finally {
EsClient.close(client);
}
}
上述索引模板创建好之后,然后在向一个不存在的索引添加文档时,如果能找到合适的模板,则自动创建索引,否则抛出索引不存在,例如:
public static void index_template() {
ElasticsearchTemplate template = new ElasticsearchTemplate();
try {
Map<String, String> data = new HashMap<>();
data.put(“host_name”, “localhost”);
data.put(“created_at”, “2019-04-07 23:05:04”);
//ubi_201904该索引一开始不存在,但索引ubi_201904符合ubi_index_template
//中定义的匹配表达式ubi*,所以会自动创建索引。
template.index(“ubi_201904”, “_doc”, data);
} finally {
template.close();
}
}
其返回结果:
IndexResponse[index=ubi_201904,type=_doc,id=lCJZ-GkBrOLJP-QWff3I,version=1,result=created,seqNo=0,primaryTerm=1,shards={“total”:2,“successful”:1,“failed”:0}]
那如果能匹配到多个模板呢?
多个索引模板可能匹配一个索引,可以使用order属性为索引模板指定顺序。从顺序较小的开始寻找,order越大,越优先(前提是匹配模板表达式)。
举例如下:
PUT /_template/template_1
{
“index_patterns” : [“*”],
“order” : 0,
“settings” : {
“number_of_shards” : 1
},
“mappings” : {
“_doc” : {
“_source” : { “enabled” : false }
}
}
}
PUT /_template/template_2
{
“index_patterns” : [“te*”],
“order” : 1,
“settings” : {
“number_of_shards” : 1
},
“mappings” : {
“_doc” : {
“_source” : { “enabled” : true }
}
}
}
首先从order=0进行匹配,由于其表达式为*,则默认会全匹配,故首先尝试使用该模板,然后再遍历下一个模板,也就是order=1的模板,如果匹配,则使用第二个模板的配置,如果不匹配,则使用第一个模板的配置,依次类推。
其匹配的具体实现逻辑大概如下:
1、对所有的模板按照order属性进行升序排序。
2、遍历所有的模板,进行表达式匹配,匹配成功,则设置为当前匹配模板,然后判断下一个,直到把所有的模板都处理过。
3、选最后匹配的模板当成最后的模板。
最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:
Dubbo面试专题
JVM面试专题
Java并发面试专题
Kafka面试专题
MongDB面试专题
MyBatis面试专题
MySQL面试专题
Netty面试专题
RabbitMQ面试专题
Redis面试专题
Spring Cloud面试专题
SpringBoot面试专题
zookeeper面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
面试专题**
[外链图片转存中…(img-Qb452K2f-1718694523750)]
zookeeper面试专题
[外链图片转存中…(img-KzpdtOIY-1718694523750)]
常见面试算法题汇总专题
[外链图片转存中…(img-wg4vwr2e-1718694523751)]
计算机网络基础专题
[外链图片转存中…(img-3Hjy2ZlC-1718694523751)]
设计模式专题
[外链图片转存中…(img-7vBeHKt4-1718694523752)]