一、前言
前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用,ES现在已升级到8.5版本,有些概念和SDK用法都有很大变化,后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。
二、映射
ES环境搭建好后最先要考虑的就是如何定义映射,映射相当于表结构,它是定义文档及其包含的字段如何存储在索引库的过程。
映射分为动态映射和显式映射
1、动态映射
使用动态映射在写入索引数据时不需要先创建索引和定义字段。字段和字段类型会根据规则自动创建。
在kinaba的dev tools中直接写入索引数据
然后我们用命令get /dy_idx/_mapping 查一下索引结构
返回几个字段表示它会根据规则自动给你设置了类型,count是long类型,create_date是date类型,memo是text类型。
然后我们再写入一条数据,把count改成字符串
这时会报错,因为字段类型根据第一次写入已经设置好了,后面写入的数据会受类型的约束。
映射规则如下,大致了解一下就行:
默认是采用"dynamic":true规则。
注:另外可以自己定义日期和数字检测规则或关闭掉自动检测。
2、显式映射
写入数据前需要先定义好映射结构,定义后写入数据受类型约束,一般使用这种方式定义会更简单一些。
写入数据
注:因为定义中birth字段包含了时间,写数据时也必须符合格式带上时间。
3、ElasticSearch字段类型
常用类型
binary(存base64结果值或二进制值)、boolean、keyword(不分词不能进行全文检索)、numbers(long、double)、date、alias(别名)、text(存储时会分词并建立索引,适合全文搜索)。
对象和关系类型
object(json对象)、nested(嵌套)、array。
其它类型
range、rank_feature、token_count、ip、geo_point、geo_shape
三、索引模板
这里我们仅介绍静态模板,动态模板比较复杂暂时也用不到。
索引模板的使用场景:比如我们的库存快照数据需要按天创建索引存储数据,即每天一个索引文件,如果没有索引模板,我们就需要每天定时创建索引映射,但有了索引模板,你插入数据时会检查有没有此索引名称匹配的索引模板,如果有就按模板创建索引映射最后插入数据。
1、创建模板
注:这里index_patters 设置为正则匹配。
2、写入数据
2022年11月15日一个索引文件
2022年11月16日一个索引文件
注:下面这个为批量写入的语法,第一条store_id为"aa"写入会失败,因为受到索引模板字段类型的约束。
在kinaba的Index Manager中可以看到生成了两个索引文件。