Elasticsearch dynamic_templates 实战 通用配置
动态模板 (Dynamic templates) 可以在创建 mapping 时,先定义好规则,当新字段满足某条规则时,就会按照该规则的预先配置来创建字段。
前些年在使用 Elasticsearch 的时候,看到过 动态模板 (Dynamic templates) 相关的知识点,但并没有想到如何在实际业务中应用,最近又看到这个知识点, 结合前些年被广泛提及的 "低代码平台",突然意识到如果有一个很简单的增删改查需求,前端通过推拽的方式组成页面,后端如果使用 Elasticsearch 进行数据存储,直接将前端传递过来的 JSON 数据进行存储,至此需求就可以完成。 但是存在的问题是数据类型需要调整,便于后续的查询和统计,那么 动态模板 (Dynamic templates) 就可以解决这个问题,在创建索引的时候,约定好数据类型,后续根据约定生成不同的数据类型。
如下定义了一个较为通用的 dynamic_templates 配置,其中约定了 integer long date boolean scaled_float 等数据类型 (string_to_*),并且针对 string 类型的数据,修改了默认的分词器规则为 IK 中文分词器。
1、"date_detection": false 的配置,关闭了日期格式的自动检测,避免识别错误, 形如 "createDate": "2000-01-01" 的格式,会不能按照如下的格式进行识别。
2、string_to_default_ik_string 部分,写在最后部分说明在当前的配置中优先级最低,并且修改了剩余的 字符串 类型的分词方式 (IK)。
3、object_list_to_nested 部分,如果是以 List 结尾的话,约定 "type": "nested" ,避免数据被平铺。
在实际应用中,如果每次创建索引的时候都复制一份如上的规则,略显笨重,从而引出 index template(创建索引时可以自动应用 settings、mappings 信息,比如希望每一天的日志的 index 都具有同样的设置)
1、首先可以初始化 index template
2、创建一个索引(test_index_template),并向索引添加文档,最后查看索引(test_index_template)对应的 mapping 是否符合预期
3、查看/删除配置的 index_template
版权声明: 本文为 InfoQ 作者【alexgaoyh】的原创文章。
原文链接:【http://xie.infoq.cn/article/9f0571d8eb303dce93e7b7697】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论