es 模糊查询_【ES 系列5】ES 查询优化
简介
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 查询优化相关推荐
- Es 模糊查询 match,wildcard
Es 模糊查询的方式 要求: Es查询: 查询工单信息, 输入 "测试",查出 form_name 为字段中有查询出含有符合内容的数据 match:分词模糊查询: 比如" ...
- es模糊查询与精准查询混用、距离排序、返回距离
es模糊查询与精准查询混用 QueryBuilder qb1 = QueryBuilders.matchPhraseQuery("XXXXXX1", "查询短语" ...
- es 模糊查询_ES系列11:Term-level queries 之 3种模糊查询和terms_set query
[系统学es系列]请移步公众号! 带着问题学习才高效 1.wildcard query.prefix query.fuzzy query这3种模糊查询的异同点是什么? 2.如何使用 terms_set ...
- Elasticsearch】es 模糊查询导致Elasticsearch服务宕机
本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...
- java中使用es精准查询_使用ES简单查询语句须知
查询样例 {"query": { //1 "bool": { ///2 "must": [{ //3 "query_string& ...
- es模糊查询汉字的问题
BoolQueryBuilder wildcardQuery模糊查询汉字有问题,在查询字段后加一个.keyword进行查询
- clob和blob是不是可以进行模糊查询_你知道什么是 MySQL 的模糊查询?
作者 | luanhz 责编 | 郭芮 本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符.RegExp正则匹配.内置字符串函数以及全文索引,最后给出了性能对比. 引言MySQL根 ...
- java表格模糊查询_使用java图形报表时,如何进行模糊查询
模糊查询是利用"_"表示单个字符和"%"表示任意个字符进行匹配的.一些常见的格式如下: Select * from 表名 where 列名 like '%'; ...
- hibernate mysql 模糊查询_服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到...
用hibernate做模糊查询,页面传递参数也处理了乱码 @Action(value="searchNameByad") public String searchNameByad( ...
- jsp模糊查询_查询知识产权和商标专利的网站汇总!
知识产权: 1.大陆知识产权网站http://202.127.48.148/zscq/search/jsp/vBrandSearchIndex.jsp根据查询条件,可以采取模糊查询和精确查询两种方式! ...
最新文章
- 嘿,程序员,你该学点经济学了!
- csgo怎么通过人机验证_让你的MacBook Pro完美运行CSGO!(图解版)
- 计算机osi模型的功能osi,OSI基本参考模型是什么 OSI基本参考模型各层功能介绍【图文】...
- Ubuntu磁盘分区以及双系统启动顺序修改
- Mac NIFI 安装
- 深度学习核心技术精讲100篇(一)-数据分析中有哪些分析指标?
- 感知器 Perceptron
- python中change是什么意思_Change是什么意思?
- [控件] TranformFadeView
- linux watch
- Java常量池学习总结-1
- Nginx实现二级域名店铺
- 64位WIN7上成功安装theano,并运行了g++, GPU
- GMP编译make check时出现FAIL t-scan
- 在日本打免费国际长途电话
- BZOJ_P3110 [ZJOI2013]K大数查询(线段树+整体二分)
- 20条职业发展建议,送给拒绝原地踏步的你
- html格式化整理输出JSON示例(测试)
- 风清清,雨霖霖,青剑低啸吟,月色如银
- 为阿里云ECS设置共享上网、端口映射