网站首页 > 技术文章 正文
1. 介绍
1.1 介绍
福哥今天要给大家讲讲关于Elasticsearch的路由功能,什么是路由?路由功能是干什么用的呢?听福哥娓娓道来!
首先,ES可以提供海量的数据的快速全文检索服务,这个“海量”的数据的量级远远不是一台服务器可以承受的了的,所以在大型搜索平台上使用ES实现搜索功能的话,必然会用到ES的集群。
2. 默认路由
正常情况下,我们向ES集群(Cluster)添加一个文档的时候,假设ES集群有3个分片(Shard),那么ES会根据一个算法计算出这个文档应该保存到哪个分片上面,这个算法会保证数据会均匀地保存到每一个分片上面。这样做的好处是,一旦某个分片出了故障被撤掉了,ES集群里的任何索引都不会出现一个文档都查不到的情况,所有索引都只会丢失故障分片上面存储的文档而已,这个给修复故障分片争取了时间。
但是这样的分配有个弊端,就是由于文档均匀分配到多个分片上面了,所以每次查询索引结果都需要向多个分片发送请求,然后再将这些分片返回的结果融合到一起返回到终端。很显然这样一来系统的压力就会增大很多,如果索引数据量不大的情况下,效率会非常差。
3. 自定义路由
为了解决这个问题,我们可以通过自定义路由功能告诉ES集群路由为XXX的文档都存到一个分片上面去,这样我们查询路由为XXX的索引的时候就可以得到更好的执行速度了!
3.1 创建索引
我们通过settings设置索引的分片数量。
PUT /tfams_2
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0
}
}
3.2 查看分片
通过shards查看索引分片信息。
curl 'http://elasticsearch:9200/_cat/shards/tfams_2'
3.3 添加文档
我们使用bulk添加3个文档。
3.3.1 test.json
{"index": {"_id": 1}}
{"doc": {"name": "PHP", "age": 35}}
{"index": {"_id": 2}}
{"doc": {"name": "Python", "age": 36}}
{"index": {"_id": 3}}
{"doc": {"name": "Java", "age": 37}}
3.3.2 bulk
curl -X POST -H 'Content-Type: application/json' --data-binary '@/tmp/test.json' 'http://elasticsearch:9200/tfams_2/tfams_2/_bulk'
3.4 再次查看分片
现在我们再来看看分片信息,可以看到刚添加的3个文档分配到了不同的分片里面。
3.5 添加路由文档
我们再往系统里面添加3个文档,这次我们给文档携带一个路由信息_routing=when_i_was_young,看看会发生什么。
3.5.1 test.json
{"index": {"_id": 4, "_routing": "when_i_was_young"}}
{"doc": {"name": "C/C++", "age": 38}}
{"index": {"_id": 5, "_routing": "when_i_was_young"}}
{"doc": {"name": "JavaScript", "age": 18}}
{"index": {"_id": 6, "_routing": "when_i_was_young"}}
{"doc": {"name": "Asp.net", "age": 28}}
3.5.2 bulk
curl -X POST -H 'Content-Type: application/json' --data-binary '@/tmp/test.json' 'http://elasticsearch:9200/tfams_2/tfams_2/_bulk'
3.6 再来查看分片
现在我们再来看看索引的分片信息,童鞋们可以看到最新添加的文档都分配到一个分片上面去了。
4. 总结
今天福哥带着童鞋们学习了Elasticsearch的路由routing的使用技巧,通过自定义ES的路由可以合理地管理数据存储的路径,从而提高索引的执行效率,以发挥ES的最大性能。
https://m.tongfu.net/home/35/blog/513363.html
- 上一篇: 如何将Elasticsearch的快照备份至OSS
- 下一篇: JVM参数及调优(jvm调优常用参数)
猜你喜欢
- 2024-10-23 微软发布6月Win11累积更新KB5039212/KB5039213
- 2024-10-23 快速体验之《gor+diffy实现线上流量复制到测试环境》
- 2024-10-23 Colbie Caillat: Try(colbiecaillattry歌词)
- 2024-10-23 基于阿里云 ASK 的 Istio 微服务应用部署初探
- 2024-10-23 浅谈ElasticSearch 集群部署(elastic集群配置)
- 2024-10-23 Python项目中跟踪系统导入Zipkin(基于python的目标跟踪算法)
- 2024-10-23 JVM参数及调优(jvm调优常用参数)
- 2024-10-23 如何将Elasticsearch的快照备份至OSS
- 2024-10-23 利用工具curl来查看http请求和https请求
- 2024-10-23 一些超实用的 Kubernetes 日常运维常用命令,建议收藏
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)