网站首页 > 博客文章 正文
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
- 上一篇: 技巧:PHP版本怎样隐藏在Linux服务器
- 下一篇: 百度实时推送代码解决方案
猜你喜欢
- 2025-05-21 上传图片到cloudflare r2
- 2025-05-21 wordpress通过代码实现百度主动推送和实时推送
- 2025-05-21 百度实时推送代码解决方案
- 2025-05-21 技巧:PHP版本怎样隐藏在Linux服务器
- 2025-05-21 Python 进阶-day24: API 开发
- 2025-05-21 kubectl常用删除命令
- 2025-05-21 HTTP 的常见头字段有哪些?说说它们的作用
- 2025-05-21 网络编程神器:让你的网络编程不再踩坑
- 2025-05-21 HTTP/HTTPS协议基础
- 2025-05-21 K8S之调度器-精细控制Pod分布
你 发表评论:
欢迎- 05-21上传图片到cloudflare r2
- 05-21wordpress通过代码实现百度主动推送和实时推送
- 05-21百度实时推送代码解决方案
- 05-21Elasticsearch的路由routing的应用技巧
- 05-21技巧:PHP版本怎样隐藏在Linux服务器
- 05-21Python 进阶-day24: API 开发
- 05-21kubectl常用删除命令
- 05-21HTTP 的常见头字段有哪些?说说它们的作用
- 377℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 372℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 356℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 351℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 351℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 346℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)