es7 创建模板时,报错 Validation Failed: 1: index patterns are missing
在使用elasticsearch 7.15 创建template时,程序报 Validation Failed: 1: index patterns are missing
在使用spring boot 集成 elasticsearch 7,每次往 elasticsearch 中索引插入数据时,为这条数据自动添加一个默认的创建时间、更新时间,又不想在数据对象中指定此字段。
上图是来自官网对 ingest pipelines(管道)的说明,意思就是在进行文档插入时,文档首先要经过 ingest pipelines(管道)进行加工处理后,再插入到索引库中。
配置自动添加默认字段的脚本程序 参考:
https://www.freesion.com/article/99011432714/
文中变量(snowflakeService):生成 雪花算法id 的一个工具类 (可以参考 hutool 工具包)
第一步:首先需要创建一个 ingest pipelines
@Test
public void testPipeline() throws IOException {
XContentBuilder jsonBuilder = jsonBuilder().startObject()
.field("description", "inner pipeline-demo-date")
.startArray("processors")
.startObject()
.field("script")
.startObject()
.field("lang", "painless")
.field("source", "" +
" def imp = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss.SSS\");\n" +
" imp.setTimeZone(TimeZone.getTimeZone(\"Asia/Shanghai\"));\n" +
" def ts = imp.format(new Date((new Date().getTime())));\n" +
" if (ctx.create_time==null ){\n" +
" ctx.create_time = ts;\n" +
" }\n" +
" if (ctx.delete_time==null ){\n" +
" ctx.delete_time = 0;\n" +
" }\n" +
" ctx.update_time = ts;" +
"")
.endObject()
.endObject()
.endArray()
.endObject();
BytesReference reference = BytesReference.bytes(jsonBuilder);
/*
* 第一个参数:管道唯一id
* 第二个参数:配置管道
* 第三个参数:管道数据类型
*/
PutPipelineRequest request = new PutPipelineRequest("pipeline-demo-date", reference, XContentType.JSON);
request.timeout(TimeValue.timeValueSeconds(2));
AcknowledgedResponse response = restHighLevelClient.ingest().putPipeline(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged());
// 关闭连接
restHighLevelClient.close();
}
第二步:创建一个模板,绑定上面创建的管道(ingest pipelines)
@Test
public void testPutIndexTemplate() throws IOException {
PutIndexTemplateRequest request = new PutIndexTemplateRequest("demo");
Settings.Builder builder = Settings.builder()
.put("default_pipeline", "pipeline-demo-date");
request.settings(builder);
XContentBuilder jsonBuilder = jsonBuilder()
.startObject()
.startObject("properties")
.startObject("date_time")
.field("type", "date")
.field("format", "epoch_millis")
.endObject()
.startObject("create_time")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss.SSS")
.endObject()
.startObject("update_time")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss.SSS")
.endObject()
.endObject()
.endObject();
BytesRefe