使用Elasticsearch的动态索引和索引优化
关于映射
实际工作中使用过ES的朋友可能会有和静儿一样的感受。ES存储更新从编码上是很方便。如下,Kubernetes的yaml文件完全可以通过json直接序列化一下,一行代码存入ES。

剩下的工作可以交给ES进行动态生成映射。索引映射的生成方式有两种:
动态映射
字段和映射类型不需要在使用前定义,新字段名可以自动被添加到索引。只需要更新索引,新字段可以被添加到顶层映射、内部对象或者嵌套字段。
显示的映射
动态的映射,字段类型定义靠的ES自己来猜。开发人员自己比ES更了解自己的索引字段。所以有时会需要明确的指定索引类型。指定索引可以在创建索引时指定,也可以使用PUT API来在已经存在的索引里添加。
使用模板创建索引
索引可使用预定义的模板进行创建,这个模板称作Index templates。模板设置包括settings和mappings,通过模式匹配的方式可以使得多个索引重用一个模板。
别名
说起来容易做起来难。调试中,需要反复的权衡和实践。发现索引的类型定义不合理,需要在ES平台上进行索引的字段类型修改。如果使用的是模板方式,修改模板后需要将索引删除后重建生效。如果只是想重命名一个字段而不修改映射,可以使用别名(alias)字段。
提高索引性能的一些建议
提高写入效率
1>使用批量请求并调整其大小
使用bulk api可以多线程并发创建,并将操作合并批量进行请求。批量的大小取决于数据、集群配置等。
2>根据日志对故障容忍,合理设置事务日志是同步还是异步
因为Translog顺序写日志比构建索引更高效。为了保证数据的完整性,ES默认每次请求结束都会进行一次sync同步操作。但是如果是海量的日志,可以容忍发生故障时丢失一定的数据,可以设成异步来提高写效率。设置参数是:index.translog.durability=async。
提高读取效率
1>根据实时性需求调整索引刷新频率
如果搜索结果不需要实时性很高,可以按需设置i索引刷新频率。设置参数是index.refresh_interval。在大批导入时间还可以通过设置此值为-1关掉刷新。
2>对索引进行合理分片
ES的分片分为两种,主分片(Primary Shard)和副本(Replicas)。分片越少写入速度越快。如果过度分配,会增大合并分片查询结果的复杂度,从而耗时增加。
3>如果不需要使用KEY之间的关系,使用展开提高效率
ES提供了为字段提供嵌套类型。嵌套类型因为包括着嵌套内字段的关系,效率低于将这些字段展平的效率。所以如果不需要使用KEY之间的关系,可以使用展开提高效率。
总结
<程序员修炼之道>不要做形式方法的奴隶
Don't Be a Slave to Formal Methods.
静儿解读:如果某项技术在开发时间和能力中作用不大,不要盲目的采用它,不要为了用而用。
相关阅读
关于作者
作者是一个有美国硅谷、日本东京工作经验,十二年坚持一线写代码的程序媛。坚持原创文章。欢迎技术交流!

使用Elasticsearch的动态索引和索引优化的更多相关文章
- ElasticSearch创建动态索引
ElasticSearch创建动态索引 需求:某实例需要按照月份来维护,所以之前的“写死”索引的方式当然不行了.通过百度和看SpringDataElasticSearch官方文档,最后解决了这个问题. ...
- Indri中的动态文档索引技术
Indri中的动态文档索引技术 戴维 译 摘要: Indri 动态文档索引的实现技术,支持在更新索引的同时处理用户在线查询请求. 文本搜索引擎曾被设计为针对固定的文档集合进行查询,对不少应用来说,这种 ...
- elasticsearch简介和倒排序索引介绍
介绍 我们为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle.SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?确实,我们大部分的查 ...
- 【SQLSERVER】索引的维护优化
一.索引的利弊 优点: 1.大大加快数据的检索速度: 2.创建唯一性索引,保证数据库表中每一行数据的唯一性: 3.加速表和表之间的连接: 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中 ...
- elasticsearch——海量文档高性能索引系统
elasticsearch elasticsearch是一个高性能高扩展性的索引系统,底层基于apache lucene. 可结合kibana工具进行可视化. 概念: index 索引: 类似SQL中 ...
- ElasticSearch(六):索引模板
ElasticSearch(六):索引模板 学习课程链接<Elasticsearch核心技术与实战> Index Template Index Template - 帮助你设定Mappin ...
- MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)
一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...
- mysql_索引原理及优化
思考: 我们知道mysql最好的数据存储量级是百万级别,是的往往在百万级别或者几十万级别就会出现慢查询(我对慢查询的定义是大于1秒),几年前我所在的一个做pos机支付的联机交易的核心系统组,当时就做过 ...
- 浅谈B+树索引的分裂优化(转)
http://www.tamabc.com/article/85038.html 从MySQL Bug#67718浅谈B+树索引的分裂优化 原文链接:http://hedengcheng.com/ ...
- 面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程
上星期写了一个篇文章,数据库方面的面试技巧,如何从建表方面展示自己能力,承蒙管理员抬举,放入首页,也承蒙各位厚爱,两天内收获了将近770个点击,也一度进入48小时热榜. 为了感谢管理员和大家的支持,再 ...
随机推荐
- Mina框架(实战详解)
Apache Mina Server 是一个网络通信应用框架,为开发高性能和高可用性的网络应用程序提供了非常便利的框架. 特点:异步的NIO框架,将UDP当成"面向连接"的协议 一 ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
- ScalaPB(4): 通用跨系统protobuf数据,sbt设置
我们知道,在集群环境节点之间进行交换的数据必须经过序列化/反序列化处理过程,而在这方面protobuf是一个比较高效.易用的模式.用户首先在.proto文件中用IDL来定义系统中各种需要进行交换的数据 ...
- IBM x3850 RAID5数据恢复过程
[raid数据恢复故障描述] 需要进行数据恢复的是北京一家公司的IBM X3850服务器,服务器挂载了5块73G SAS硬盘组成raid5磁盘阵列,4号盘为热备盘(Hot-Spare),由于未知 ...
- springboot+mybatis+ehcache实现缓存数据
一.springboot缓存简介 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓 ...
- Redis配置文件中关于bind参数
在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址.这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,这样可以避免将redis服务暴 ...
- 好代码是管出来的——使用Git来管理源代码
软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码 ...
- Base64 image
[前端攻略]:玩转图片Base64编码 什么是 base64 编码? 我不是来讲概念的,直接切入正题,图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样 ...
- CORS 实战 专题
本文会代码层面对CORS问题进行剖析 CORS相关相关概念可参考http://www.cnblogs.com/softidea/p/5496719.html ERROR info: XMLHttpRe ...
- jmeter添加断言
先创建一个线程组,再创建一个http请求. 为了方便观察,我们添加两个监听器,察看结果树和断言结果. 添加断言:响应断言,响应断言也是比较常用的一个断言 设置响应断言:正常情况下响应代码是200.选择 ...