
elasticsearch 进阶
远处的海亲吻着天
从事JAVA软件开发
展开
-
Elasticsearch 6.X 新类型Join深入详解
0、ES6.X 一对多、多对多的数据该如何存储和实现呢?引出问题:“某头条新闻APP”新闻内容和新闻评论是1对多的关系?在ES6.X该如何存储、如何进行高效检索、聚合操作呢?相信阅读本文,你就能得到答案!1、ES6.X 新类型Join 产生背景 Mysql中多表关联,我们可以通过left join 或者Join等实现; ES5.X版本,借助父子文档实现多表关...原创 2020-03-25 11:00:33 · 421 阅读 · 0 评论 -
Elasticsearch性能调优之磁盘读写性能优化
优化磁盘空间的占用,减少磁盘空间的占用,更多的数据可以进入filesystem cache比如说你原来,磁盘空间占用一共是1T,内存只有512G,现在优化了磁盘空间占用之后,减少了数据量,可能数据量就只有512G了,那么就可以全部进入内存1、禁用不需要的功能聚合,搜索,评分,近似匹配聚合:doc values搜索:倒排索引,index评分:norms近似匹配:index_op...原创 2020-03-22 15:56:18 · 2256 阅读 · 0 评论 -
Elasticsearch性能调优之搜索性能优化
magic,如果真的要优化搜索性能的话,就是以下几种办法1/5,配合起来,就是搜索性能优化的杀手锏3/4,配合起来,解决各种复杂的搜索需求的性能1、给filesysgtem cache更多的内存es的搜索引擎严重依赖于底层的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的indx segment file索引数据文件,那么...原创 2020-03-22 15:36:22 · 858 阅读 · 0 评论 -
Elasticsearch性能调优之索引写入性能优化
1和2,适合的是,你的es java client程序,可以采取批量写的场景3,比较通用的,比较合适的是,你对于写入数据到可以读到能够接受比较大的延迟4,一次性批量导入数据的场景5/6/7/8/9,通用型,尽量都去做到1/2/3/4,都是有各自适用的场景,如果场景合适,就尽量用,因为对性能的提升都是很明显的5/6/7/8/9,其中通用,尽量去优化你的集群,但是其中最重要的,就是3块,...原创 2020-03-22 15:25:32 · 1377 阅读 · 0 评论 -
Elasticsearch性能调优之基本优化
1、搜索结果不要返回过大的结果集es是一个搜索引擎,所以如果用这个搜索引擎对大量的数据进行搜索,并且返回搜索结果中排在最前面的少数结果,是非常合适的。然而,如果要做成类似数据库的东西,每次都进行大批量的查询,是很不合适的。如果真的要做大批量结果的查询,记得考虑用scroll api。2、避免超大的documenthttp.max_context_length的默认值是100mb,意味着...原创 2020-03-22 14:02:19 · 410 阅读 · 0 评论 -
Elasticsearch性能调优之慢查询日志
es里面的操作,主要分为两种,一种写入(增删改),另一种是查询(搜索)我们分别要识别出来,哪些写入操作性能比较慢,哪些查询操作性能比较慢,先要识别出来有性能问题的这些慢查询,慢写入,然后才能去考虑如何优化写入的性能,如何优化搜索的性能搜索慢查询日志无论是慢查询日志,还是慢写入日志,都是针对shard级别的,因为大家应该知道,无论你是执行增删改,还是执行搜索,都是对某个数据执行写入或者是...原创 2020-03-22 13:52:11 · 2614 阅读 · 1 评论 -
Elasticsearch的底层模块深入解析之node
node module,主要是用来处理各种不同类型的节点的,es有哪些类型的node,另外就是对这些类型的node有些什么特殊的参数,对于一个较大的集群来说,如何去规划和配置各种各样的node1、node类型如果我们启动es的一个实例,那么就是启动了一个es node,一些es node就可以组成一个es集群。如果仅仅运行了一个es node,那么也有一个es集群,只是节点数量就是1。...原创 2020-03-22 13:28:58 · 2388 阅读 · 0 评论 -
28.Elasticsearch的底层模块深入解析之gateway
gateway,elasticsearch底层的一个module,这个module,你也可以认为是什么呢?认为是es代码中的一个模块gateway这个模块是负责干什么的,module,java,j2ee,java web,用户管理模块,订单管理模块。。。用户管理模块,就是类似一个module,是用来管理用户信息的elasticsearch底层模块,英文,module,类似用户管理模块,订单...原创 2020-03-13 11:12:31 · 3816 阅读 · 0 评论 -
27.Elasticsearch的底层模块深入解析之shard allocation
1、shard allocation的介绍两种node:master node,data nodemaster node的一个很重要的功能,比如说,你现在创建了一个索引,然后这个索引是不是有很多的shard,可能你自己指定了几个primary shard,每个primary shard还有一些replica shard。master node,其实就是决定哪些shard分配给哪些node,...原创 2020-03-13 10:48:42 · 2051 阅读 · 0 评论 -
26.Elasticsearch生产集群中的索引管理(五)
1、mergees里的一个shard,就是一个lucene index,每个lucene index都是由多个segment file组成的。segment file负责存储所有的document数据,而且segment file是不可变的。一些小的segment file会被merge成一个大的segment file,这样可以保证segment file数量不会膨胀太多,而且可以将删除的数...原创 2020-03-13 09:47:11 · 145 阅读 · 0 评论 -
25.Elasticsearch生产集群中的索引管理(四)
1、circuit breakeres有很多的断路器,也就是circuit breaker,可以用来阻止各种操作导致OOM内存溢出。每个断路器都有一个限制,就是最多可以使用多少内存。此外,还有一个父断路器指定了所有断路器最多可以使用多少内存。(1)父短路器indices.breaker.total.limit,可以配置父短路器的最大内存限制,默认是jvm heap内存的70%(2)...原创 2020-03-13 09:27:13 · 472 阅读 · 0 评论 -
24.Elasticsearch生产集群中的索引管理(三)
1、indice statindice stat对index上发生的不同类型的操作都提供了统计。这个api提供了index level的统计信息,不过大多数统计信息也可以从node level获取。curl -H "Content-Type:application/json" -XGET 'http://elasticsearch02:9200/twitter/_stats?pretty...原创 2020-03-12 14:04:31 · 188 阅读 · 0 评论 -
23.Elasticsearch生产集群中的索引管理(二)
1、mapping管理下面这个命令是在创建索引curl -H "Content-Type:application/json" -XPUT 'http://elasticsearch02:9200/twitter?pretty' -d ' { "mappings": { "properties": { "message": { "t...原创 2020-03-12 11:26:47 · 179 阅读 · 0 评论 -
22.Elasticsearch生产集群中的索引管理(一)
1、创建索引(1)创建索引的语法用settings给这个索引在创建时可以添加一些设置,还有可以初始化一些type的mappingcurl -H "Content-Type:application/json" -XPUT 'http://elasticsearch02:9200/twitter?pretty' -d '{ "settings" : { "ind...原创 2020-03-12 11:04:02 · 303 阅读 · 0 评论 -
21.Elasticsearch生产集群部署之重要的操作系统设置
1、系统的重要配置理想情况下,es应该单独在一个服务器上运行,能够使用服务器上的所有资源。为了达到上述目标,我们需要配置操作系统,来允许用户运行es并且获取比默认情况下更多的资源。在生产环境中下面的一些设置必须配置一下:(1)禁止swapping(2)确保拥有足够的虚拟内存(3)确保拥有足够的线程数量开发模式 vs 生产模式默认情况下,es会假设你是在开发模式下运行的。如果...原创 2020-03-05 13:12:38 · 261 阅读 · 0 评论 -
20.Elasticsearch生产集群部署之jvm和服务器内存分配的最佳实践以及原理分析
除了之前讲解的一些配置,根据你的集群环境特殊的配置,我们这一讲来讲解最重要的内存的分配,提出一些问题,生产环境部署es,不可避免要回答一个问题,比如我的机器上有64G的内存,或者32G的内存,那么一般来说我应该分配多少个G的内存给es的jvm heap1、jvm heap分配es默认会给jvm heap分配2个G的大小,对于几乎所有的生产环境来说,这个内存都太小了。如果用这个默认的heap...原创 2020-03-05 12:31:08 · 663 阅读 · 0 评论 -
19.Elasticsearch生产集群部署之绝对不能随意调节jvm和thread pool的原因
es中有很多的配置都让大家忍不住去调优,因为也许大家都太过于迷恋性能优化了,都认为优化一些配置可以大幅度提升性能,就感觉性能调优像个魔法一样,是个万能的东西。但是其实99.99%的情况下,对于es来说,大部分的参数都保留为默认的就可以了。因为这些参数经常被滥用和错误的调节,继而导致严重的稳定性问题以及性能的急剧下降。1、jvm gcjvm使用垃圾回收器来释放掉不用的内存,千万不要去调节默认...原创 2020-03-05 12:08:48 · 169 阅读 · 0 评论 -
18.Elasticsearch生产集群部署之针对集群重启时的shard恢复耗时过长问题定制的重要参数
shard recovery配置以及集群重启时的无意义shard重分配问题在集群重启的时候,有一些配置会影响shard恢复的过程。首先,我们需要理解默认配置下,shard恢复过程会发生什么事情。如果我们有10个node,每个node都有一个shard,可能是primary shard或者replica shard,你有一个index,有5个primary shard,每个primary sha...原创 2020-03-05 11:50:37 · 372 阅读 · 0 评论 -
17.Elasticsearch生产环境集群部署之针对生产集群的脑裂问题专门定制的重要参数
脑裂问题如果因为网络的故障,导致一个集群被划分成了两片,每片都有多个node,以及一个master,那么集群中就出现了两个master,但是因为master是集群中非常重要的一个角色,主宰了集群状态的维护,以及shard的分配,因此如果有两个master的话,可能会导致破坏数据。discovery.zen.minimum_master_nodes 参数来防止脑裂。这个参数的作用就是告诉...原创 2019-12-08 22:20:36 · 255 阅读 · 0 评论 -
16.Elasticsearch生产集群部署之必须根据自己的集群设置的一些重要参数
1、es的默认参数es的默认参数是非常好的,适合绝大多数的情况,尤其是一些性能相关的配置。因此刚开始部署一个生产环境下的es集群时,几乎所有的配置参数都可以用默认的设置。比如mysql或者oracle这种关系型数据库,也许是需要非常重的调优,但是es是真的不用。如果我们现在面临着一些es的性能问题,通常建议的解决方案是更好的进行数据结构的布局,或者增加更多的节点和机器资源。在es的性能调优...原创 2020-03-03 21:56:56 · 349 阅读 · 0 评论 -
15.ES 生产集群部署之 集群发现机制
集群发现机制默认情况下,es进行会邦定 在自己的回环地址上,也就是127.0.0.1,然后扫描本机上的9300-9305端口号,尝试跟那些端口号上启动的其他ES进程进行通信,然后组成一个集群。对于本机搭建es集群开发环境是很方便的,但是对于生产环境是不行的,需要将每台ES进程绑定在一个非回环的IP地址上,才能跟其他节点进行通信,同时需要使用集群发现机制来跟其他节点上的es node进行通信。...原创 2019-12-08 17:41:07 · 513 阅读 · 0 评论 -
14.ES 生产集群部署之 jvm以及集群规划
1、内存ES是很吃内存的,es吃的主要不是你的jvm的内存,一般来说es用jvm heap(堆内存)还是用的比较少,主要吃的是你的机器的内存ES底层基于Lucene,lucene是基于磁盘文件来读写和保存你的索引数据的,倒排索引,正排索引,lucene的特点就是会基于os filesystem cache,会尽量将频繁访问的磁盘文件的数据在操作系统的内存中缓存,然后尽量提升磁盘文件读写的性...原创 2019-12-08 17:41:30 · 646 阅读 · 0 评论 -
9.熟练掌握ES Java API基于search template实现按品牌分页查询模板
搜索模板的功能,java api怎么去调用一个搜索模板page_query_by_brand.mustache{ "from": {{from}}, "size": {{size}}, "query": { "match": { "brand.keyword": "{{brand}}" } }}SearchResponse...原创 2020-03-02 17:37:38 · 246 阅读 · 0 评论 -
8.熟练掌握ES Java API基于maget实现多辆汽车的配置与价格对比
mget,一次性将多个document的数据查询出来,放在一起显示PUT /car_shop/cars/2{ "brand": "奔驰", "name": "奔驰C200", "price": 350000, "produce_date": "2018-01-05"}Settings settings = Settings.builder() ...原创 2020-03-02 17:37:08 · 380 阅读 · 0 评论 -
7.熟练掌握ES Java API基于upsert实现汽车最新价格的调整
做一个汽车零售数据的mapping,我们要做的第一份数据,其实汽车信息PUT /car_shop{ "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "cars": { "properties": { "brand"...原创 2020-03-02 17:36:22 · 448 阅读 · 0 评论 -
6.熟练掌握ES Java API_client集群自动探查
、client集群自动探查默认情况下,是根据我们手动指定的所有节点,一次轮询这些节点,来发送各种请求的,如下面的代码,我们可以手动为client指定多个节点 TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocket...原创 2020-03-02 17:13:03 · 258 阅读 · 0 评论 -
5.进阶之使用动态映射模板定制自己的映射策略
我们本来没有某个type,或者没有某个field,但是希望在插入数据的时候,es自动为我们做一个识别,动态映射出这个type的mapping,包括每个field的数据类型,一般用的动态映射,dynamic mappingdynamic mapping这里有个问题,如果说,我们其实对dynamic mapping有一些自己独特的需求,比如说,es默认来说,如经过识别到一个数字,field: ...原创 2020-03-02 17:01:04 · 236 阅读 · 0 评论 -
4.进阶之基于completion suggest实现搜索提示
不用你把所有你想要输入的文本都输入完,搜索引擎会自动提示你可能是想要搜索的那个文本1.创建索引PUT /news_website{ "settings": { "number_of_shards": 3, "number_of_replicas": 0 }, "mappings": { "news": { "properties...原创 2020-03-02 16:46:18 · 382 阅读 · 0 评论 -
3.进阶之使用search template将搜索模板化
搜索模板,search template,高级功能,就可以将我们的一些搜索进行模板化,然后的话,每次执行这个搜索,就直接调用模板,给传入一些参数就可以了1、search template入门GET /blog_website/blogs/_search/template{ "source": { "query": { "match": { ...原创 2020-03-02 16:21:20 · 1205 阅读 · 0 评论 -
2.进阶之深入剖析搜索结果的highlight高亮显示
、一个基本的高亮例子PUT /blog_website{ "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "blogs": { "properties": { "title": { "type": "...原创 2020-03-02 10:27:02 · 548 阅读 · 0 评论 -
1.进阶之基于term vector深入探查数据的情况
1、term vector介绍获取document中的某个field内的各个term的统计信息term information: term frequency in the field, term positions,start and end offsets, term payloadsterm statistics: 设置term_statistics=true; total term...原创 2020-03-02 10:02:59 · 404 阅读 · 0 评论