简介

ES 虽然在设计架构上有非常好的搜索性能,但是随着数据量的不断增加,会有很多因素影响着 ES 的查询性能。本文从 集群规划索引设计、以及 查询方法 的角度,介绍了关于 ES 查询优化的一些手段,本文主要参考文章如下:

https://blog.csdn.net/laoyang360/article/details/82080012
让Elasticsearch飞起来!百亿级实时查询优化实战

集群优化

更好的硬件

如果条件允许的情况下,采用SSD,配置更大的内存以及更快的CPU。

角色分工

Master Node 仅用于管理集群,Tribe Node 仅用于对不同集群请求的转发,Data Node 仅用于对实际数据的存储与分析。

filesystem cache 留存较大容量

至少有一半的可用内存进入文件系统缓存,以便 ES 可以将索引的热区域保留在内存中。

冷热节点架构

# 将高性能节点标记为 hot
./bin/elasticsearch -Enode.attr.box_type

我们可以通过指定参数"routing.allocation.include.box_type": "hot",让所有符合命名规则索引的 Shard 都将被分配到 Hot Nodes 上:

PUT _template/active-logs
{"template": "active-logs-*","settings": {"number_of_shards":   5,"number_of_replicas": 1,"routing.allocation.include.box_type": "hot","routing.allocation.total_shards_per_node": 2},"aliases": {"active-logs":  {}}
}

同样符合命名规则索引的 Shard 会被分配到 Warm Nodes 上,我们指定了更少的 Shards 数量和复本数。注意,这里的复本数为 0,和 best_compression 级别的压缩,方便做迁移等操作,以及进行一些数据的压缩:

PUT _template/inactive-logs
{"template": "inactive-logs-*","settings": {"number_of_shards":   1,"number_of_replicas": 0,"routing.allocation.include.box_type": "warm","codec": "best_compression"}
}

Rollover API 切割以后,active-logs-1 将变成一个冷索引,我们将它移动到 Warm Nodes 上。先将索引置为只读状态,拒绝任何写入操作,然后修改 index.routing.allocation.include.box_type 属性,ES 会自动移动所有 Shards 到目标 Data Nodes 上:

PUT active-logs-1/_settings
{"index.blocks.write": true,"index.routing.allocation.include.box_type": "warm"
}

Cluster Health API 可以查看迁移状态,完成后进行收缩操作,其实相当于复制出来一个新的索引,旧的索引还存在。

POST active-logs-1/_shrink/inactive-logs-1

到目前为止我们已经实现了索引的冷热分离,和索引的收缩,我们知道每个 Shard 下面由多个 Segment 组成,那 inactive-logs-1 的 Shard 数是 1,但 Segment 还是多个。这类索引不会在接受写入操作,为了节约空间和改善查询性能,通过 Forcemerge API 将 Segment 适量合并:

POST /active-logs-1/_forcemerge?only_expunge_deletes=false&max_num_segments=1&flush=true

最后删除 active-logs-1,因为我们已经为它做了一个查询复本 inactive-logs-1。

索引设计优化

按日期建立索引:根据索引产生数据量的速率,按照月、周、天来滚动建立索引。

字段拉平将复合字段拆分为多个不同字段,查询时减少查询的字段个数。

提前建立 mapping:预先建立 mapping,而不是让 ES 自动生成数据类型,加速检索

确定副本数量:max(max_failures, ceil(num_nodes/num_promaries)-1)

使用 keyword 代替 int/long

对只读索引 force-merge

查询方法优化

减少模糊匹配:match匹配(有索引),避免使用模糊匹配(wildcard)。

使用日期字段搜索范围:缩小查询的范围

使用过滤器上下文filter过滤器子句用于回答“这个文档是否匹配这个子句”,Elasticsearch只需要回答“是”或“否”,不需要为过滤器子句计算相关性分数,而且过滤器结果可以缓存。

使用 Rounting: shard_num = hash(_routing) % num_primary_shards

es 模糊查询_【ES 系列5】ES 查询优化相关推荐

  1. Es 模糊查询 match,wildcard

    Es 模糊查询的方式 要求: Es查询: 查询工单信息, 输入 "测试",查出 form_name 为字段中有查询出含有符合内容的数据 match:分词模糊查询: 比如" ...

  2. es模糊查询与精准查询混用、距离排序、返回距离

    es模糊查询与精准查询混用 QueryBuilder qb1 = QueryBuilders.matchPhraseQuery("XXXXXX1", "查询短语" ...

  3. es 模糊查询_ES系列11:Term-level queries 之 3种模糊查询和terms_set query

    [系统学es系列]请移步公众号! 带着问题学习才高效 1.wildcard query.prefix query.fuzzy query这3种模糊查询的异同点是什么? 2.如何使用 terms_set ...

  4. Elasticsearch】es 模糊查询导致Elasticsearch服务宕机

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...

  5. java中使用es精准查询_使用ES简单查询语句须知

    查询样例 {"query": { //1 "bool": { ///2 "must": [{ //3 "query_string& ...

  6. es模糊查询汉字的问题

    BoolQueryBuilder wildcardQuery模糊查询汉字有问题,在查询字段后加一个.keyword进行查询

  7. clob和blob是不是可以进行模糊查询_你知道什么是 MySQL 的模糊查询?

    作者 | luanhz 责编 | 郭芮 本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符.RegExp正则匹配.内置字符串函数以及全文索引,最后给出了性能对比. 引言MySQL根 ...

  8. java表格模糊查询_使用java图形报表时,如何进行模糊查询

    模糊查询是利用"_"表示单个字符和"%"表示任意个字符进行匹配的.一些常见的格式如下: Select * from 表名 where 列名 like '%'; ...

  9. hibernate mysql 模糊查询_服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到...

    用hibernate做模糊查询,页面传递参数也处理了乱码 @Action(value="searchNameByad") public String searchNameByad( ...

  10. jsp模糊查询_查询知识产权和商标专利的网站汇总!

    知识产权: 1.大陆知识产权网站http://202.127.48.148/zscq/search/jsp/vBrandSearchIndex.jsp根据查询条件,可以采取模糊查询和精确查询两种方式! ...

最新文章

  1. 嘿,程序员,你该学点经济学了!
  2. csgo怎么通过人机验证_让你的MacBook Pro完美运行CSGO!(图解版)
  3. 计算机osi模型的功能osi,OSI基本参考模型是什么 OSI基本参考模型各层功能介绍【图文】...
  4. Ubuntu磁盘分区以及双系统启动顺序修改
  5. Mac NIFI 安装
  6. 深度学习核心技术精讲100篇(一)-数据分析中有哪些分析指标?
  7. 感知器 Perceptron
  8. python中change是什么意思_Change是什么意思?
  9. [控件] TranformFadeView
  10. linux watch
  11. Java常量池学习总结-1
  12. Nginx实现二级域名店铺
  13. 64位WIN7上成功安装theano,并运行了g++, GPU
  14. GMP编译make check时出现FAIL t-scan
  15. 在日本打免费国际长途电话
  16. BZOJ_P3110 [ZJOI2013]K大数查询(线段树+整体二分)
  17. 20条职业发展建议,送给拒绝原地踏步的你
  18. html格式化整理输出JSON示例(测试)
  19. 风清清,雨霖霖,青剑低啸吟,月色如银
  20. 为阿里云ECS设置共享上网、端口映射

热门文章

  1. fscanf、fprintf的返回值
  2. log4j.properties中log4j.rootLogger 与log4j.rootCategory 有什么区别 .
  3. 实战篇-六十六行完成简洁的Rss输出类
  4. Shiro框架中有三个核心概念:Subject ,SecurityManager和Realms。
  5. 我对未来技术趋势的一些看法
  6. datax,同步数据,mysql sqlserver 双向
  7. 2017-01-20_dp测试
  8. redis 性能监控和排查
  9. MVC3----配置连接数据库
  10. 【闲聊产品】之一:半路出家的产品经理