聊一聊Elasticsearch的索引(1)

本文主要对ES索引的映射、路由规则、别名、滚动索引进行整理和介绍。

1、映射

ES是通过索引映射来建立索引结构,索引映射相当于数据库的数据字典,定义了每个字段的名称以及所能保存的数据类型。

索引的映射创建后,后续还可以在映射上添加新字段,但是旧的字段无法删除和修改。

对于映射所能支持的常规数据类型,这里我就举两个例子:

  • 文本类型(text):支持分词的字段类型,默认情况下,ES会使用标准分词器将文本切分,并将切分后的文本保存到索引中。
  • 关键字类型(keyword):与文本类型不同,关键字类型的字段不需要进行分词处理,保存的是原始文本。当我们要做精确查询的时候字段必须是keyword类型。

忽略映射中不合法的数据,即写入数据如果不符合映射的定义,不会影响其他字段的写入,例如:一个字段的类型是时间类型,但是将"aaa"写入该字段,虽然该字段无法成功写入,但是也不会影响到其他字段的写入。

我们可以通过在映射中为某个字段定义copt_to参数,以实现将该字段复制到另外一个字段上,即「字段复制」。通过这种方式,我们可以实现一个查询条件对应多个字段查询的情况。如下图:

通过上图,我们可以看到title、author、abstract三个字段copt_to到了full_text。这样我们就可以实现只查询full_text字段就可以达到分别查询title、author、abstract三个字段的效果。

需要注意的是这里的full_text字段并不属于_source元数据,即它不是构建搜索的原始文本,例如上边的例子,构建索引的时候需要提供tilte、author、abstract者三个字段,而无需提供full_text。

默认情况下,只有_source元数据中的字段才会被保存到磁盘上,如果有需要将full_text字段也保存到磁盘上,我们可以通过在映射的时候将full_text字段的store属性设置为true,如下图:

ES支持动态映射,即写入索引的数据可以包含之前未定义的字段,ES会根据数据的内容自动匹配数据类型。匹配的规则除了默认之外,还支持自定义。

2、路由规则

ES通过路由规则来确定索引数据到底写入到哪个分片上。默认情况下,ES会使用下图这个公式来计算数据要写入的分片的编号:

3、别名

我们可以通过一个别名指向多个索引,这样搜索的时候使用别名就能同时搜索到多个索引的数据。

别名配合数据过滤,即可以给别名设置数据过滤条件,这样通过别名查询的时候就会自带查询条件,达到自动过滤数据的效果。

别名配合路由,即可以给别名设置路由,这样读写别名的时候就会自动携带路由信息。

4、滚动索引

当索引的数据量太大的时候,如果再往索引中写入数据会造成分片容量过大,会导致查询的时候内存不够引起整个集群的崩溃。这个时候我们可以考虑通过滚动索引 将数据写入到别的索引上,滚动索引需要与索引别名配合使用(可以理解是基于别名却创建一个滚动索引)。

假设有个名为log_idx_0的索引,它别名为log_idx_all。然后为别名log_idx_all指定一个滚动索引,如下图:

触发创建滚动索引需要符合一定的条件。

如果符合条件,则会创建一个新的索引,例如:log_idx_1,此时会将索引log_idx_0从别名log_idx_all中删除,并将别名log_idx_all指向log_idx_1。以后再通过别名log_idx_all写数据,数据会被写入到索引log_idx_1中。

如果不符合条件,则不会创建新的索引log_idx_1,数据依然会写入到索引log_idx_0中。

ES是不会自动的去检查当前索引是否符合触发滚动索引的条件了,我们只能采用手动的去轮询调用_rollover端点,并通返回结果来进行判断(索引是否符合触发滚动索引条件了、是否成功创建新的索引了)。

5、参考文献

  • 《Elasticsearch数据搜索与分析实战》------王深湛

上一篇:《聊一聊Elasticsearch的索引数据搜索过程》

相关推荐
A__tao8 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
2501_948114248 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
黎阳之光8 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
专注API从业者10 小时前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
V搜xhliang024610 小时前
AI大模型在临床决策与手术机器人领域的应用
大数据·人工智能·机器人
A__tao10 小时前
Elasticsearch Mapping 一键生成 Proto 文件(支持嵌套 + 注释过滤)
大数据·elasticsearch·jenkins
Devin~Y10 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
Gofarlic_OMS11 小时前
装备制造企业Fluent许可证成本分点典型案例
java·大数据·开发语言·人工智能·自动化·制造
程序员雷欧11 小时前
大模型应用开发学习第八天
大数据·人工智能·学习