Elasticsearch系列
一套完整的Elasticsearch知识系列,涵盖Elasticsearch的知识原理,架构原理剖析,以及实战案例,是值得花时间阅读的专栏
1黄鹰
这个作者很懒,什么都没留下…
展开
-
Elasticsearch系列---性能调优最佳实践
概要性能调优是系统架构里所有组件必不可少的话题,Elasticsearch也不例外,虽说Elasticsearch内的默认配置已经非常优秀,但这不表示它就是完美的,必要的一些实践我们还是需要了解一下。开启慢查询日志慢查询日志是性能诊断的重要利器,常规操作是设置慢查询的阀值,然后运维童鞋每天对慢日志进行例行巡查,有特别慢的查询,立即报备事件处理,其余的定期将慢日志的top n取出来进行优化。慢日志的配置在elasticsearch 6.3.1版本下是通过命令配置的,读操作和写操作可以单独设置,阀值的定原创 2020-06-24 06:59:44 · 521 阅读 · 0 评论 -
Elasticsearch系列---生产集群的索引管理
概要索引是我们使用Elasticsearch里最频繁的部分日常的操作都与索引有关,本篇从运维人员的视角,来玩一玩Elasticsearch的索引操作。基本操作在运维童鞋的视角里,索引的日常操作除了CRUD,还是打开关闭、压缩、alias重置,我们来了解一下。创建索引[esuser@elasticsearch02 ~]$curl -XPUT 'http://elasticsearch02:9200/music?pretty' -H 'Content-Type: application/json' -原创 2020-06-22 07:29:11 · 282 阅读 · 0 评论 -
Elasticsearch系列---生产数据备份恢复方案
前言生产环境中运行的组件,只要有数据存储,定时备份、灾难恢复是必修课,mysql数据库的备份方案已经非常成熟,Elasticsearch也同样有成熟的数据备份、恢复方案,我们来了解一下。概要本篇介绍Elasticsearch生产集群数据的数据备份、恢复和升级的常规操作。curl命令curl是Linux操作的必备工具,Elasticsearch生产环境的搭建,不能保证都能使用kibana访问到,而Elasticsearch Restful API都可以使用curl工具来完成访问。使用curl还有一原创 2020-06-12 07:12:39 · 538 阅读 · 0 评论 -
Elasticsearch系列---生产集群部署(下)
概要本篇继续讲解Elasticsearch集群部署的细节问题集群重启问题如果我们的Elasticsearch集群做了一些离线的维护操作时,如扩容磁盘,升级版本等,需要对集群进行启动,节点数较多时,从第一个节点开始启动,到最后一个节点启动完成,耗时可能较长,有时候还可能出现某几个节点因故障无法启动,排查问题、修复故障后才能加入到集群中,此时集群会干什么呢?假设10个节点的集群,每个节点有1个shard,升级后重启节点,结果有3台节点因故障未能启动,需要耗费时间排查故障,如下图所示:整个过程步骤如下原创 2020-06-05 07:02:32 · 347 阅读 · 0 评论 -
Elasticsearch系列---生产集群部署(上)
概要本篇开始介绍Elasticsearch生产集群的搭建及相关参数的配置。ES集群的硬件特性我们从开始编程就接触过各种各样的组件,而每种功能的组件,对硬件要求的特性都不太相同,有的需要很强的CPU计算能力,有的对内存需求量大,有的对网卡要求高等待,下面我们讨论一下ES集群对几种硬件的特性需求。CPUES集群对CPU的要求相对低一些,毕竟纯计算的比重要小一些,选用主流的CPU,2核到8核的都可以。如果有两种CPU可以挑选,一种是主频高但核数少的CPU,另一种是主频一般核数多的CPU,肯定选后一种,原创 2020-05-30 07:34:10 · 380 阅读 · 0 评论 -
Elasticsearch系列---Java客户端代码Demo
前言前面历经33篇内容的讲解,与ES的请求操作都是在Kibana平台上用Restful请求完成的,一直没发布Java或python的客户端代码,Restful才是运用、理解ES核心功能最直接的表达方式,但实际项目中肯定是以Java/python来完成ES请求的发起与数据处理的,前面理解了ES的核心功能,后面Java API的使用将会非常简单,剩余的未覆盖的功能API,自行查阅文档即可。概要本篇讲解Elasticsearch的客户端API开发的一些示例,以Java语言为主,介绍一些最常用,最核心的API原创 2020-05-23 20:58:32 · 617 阅读 · 0 评论 -
Elasticsearch系列---几个高级功能
概要本篇主要介绍一下搜索模板、映射模板、高亮搜索和地理位置的简单玩法。标准搜索模板搜索模板search tempalte高级功能之一,可以将我们的一些搜索进行模板化,使用现有模板时传入指定的参数就可以了,避免编写重复代码。对常用的功能可以利用模板进行封装,使用时更简便。这点类似于我们编程时的接口封装,将一些细节处理的东西封装成接口,供别人调用,使用者就只需要关注参数和响应结果就行,这样可以更好地提高代码复用率。下面我们来看看最基本的几种用法参数替换GET /music/children/_se原创 2020-05-16 06:52:54 · 490 阅读 · 0 评论 -
Elasticsearch系列---Term Vector工具探查数据
概要本篇主要介绍一个Term Vector的概念和基本使用方法。term vector是什么?每次有document数据插入时,elasticsearch除了对document进行正排、倒排索引的存储之外,如果此索引的field设置了term_vector参数,elasticsearch还会对这个的分词信息进行计算、统计,比如这个document有多少个field,每个field的值分词处理后得到的term的df值,ttf值是多少,每个term存储的位置偏移量等信息,这些统计信息统称为term vec原创 2020-05-09 07:50:11 · 460 阅读 · 0 评论 -
Elasticsearch系列---实现分布式锁
概要Elasticsearch在文档更新时默认使用的是乐观锁方案,而Elasticsearch利用文档的一些create限制条件,也能达到悲观锁的效果,我们一起来看一看。乐观锁与悲观锁乐观锁ES默认实现乐观锁,所有的数据更新默认使用乐观锁机制。document更新时,必须要带上currenct version,更新时与document的version进行比较,如果相同进行更新操作,不相同表...原创 2020-04-30 06:57:25 · 855 阅读 · 0 评论 -
Elasticsearch系列---数据建模实战
概要本篇以实际案例为背景,介绍不同技术组件对数据建模的特点,并以ES为背景,介绍常用的联合查询的利弊,最后介绍了一下文件系统分词器path_hierarchy和嵌套对象的使用。数据模型对比实际项目中,电商平台系统常见的组合Java、Mysql和Elasticsearch,以基础的部门-员工实体为案例。JavaBean类型定义如果是JavaBean类型,会这样定义public class...原创 2020-04-25 07:44:43 · 444 阅读 · 0 评论 -
Elasticsearch系列---聚合查询原理
概要本篇主要介绍聚合查询的内部原理,正排索引是如何建立的和优化的,fielddata的使用,最后简单介绍了聚合分析时如何选用深度优先和广度优先。正排索引聚合查询的内部原理是什么,Elastichsearch是用什么样的数据结构去执行聚合的?用倒排索引吗?工作原理我们了解到倒排索引对搜索是非常高效的,但是在排序或聚合操作方面,倒排索引就显得力不从心,例如我们举个实际案例,假设我们有两个文档...原创 2020-04-17 07:59:47 · 1070 阅读 · 0 评论 -
Elasticsearch系列---聚合查询(二)
### 概要### 近似聚合算法上一篇我们演练的聚合算法,在Elasticsearch分布式场景下,其实是有略微区别的,简单来说我们可以把这些聚合算法分成两类,易并行算法和不易并行算法。#### 易并行算法比如max,min,就是多个node或shard可以单独并行计算,并且可以随着机器数的线性增长而横向扩展,没有任何协调操作,得到的结果返回给Coordinate Node时的数据...原创 2020-04-10 07:03:35 · 614 阅读 · 0 评论 -
Elasticsearch系列---聚合查询(一)
概要Elasticsearch的聚合查询,跟数据库的聚合查询效果是一样的,我们可以将二者拿来对比学习,如求和、求平均值、求最大最小等等。基础概念bucket数据分组,一些数据按照某个字段进行bucket划分,这个字段值相同的数据放到一个bucket中。可以理解成Java中的Map<String, List>结构,类似于Mysql中的group by后的查询结果。metric:...原创 2020-04-03 06:54:41 · 880 阅读 · 0 评论 -
Elasticsearch系列---使用中文分词器
前言前面的案例使用standard、english分词器,是英文原生的分词器,对中文分词支持不太好。中文作为全球最优美、最复杂的语言,目前中文分词器较多,ik-analyzer、结巴中文分词、THULAC、NLPIR和阿里的aliws都是非常优秀的,我们以ik-analyzer作为讲解的重点,其它分词器可以举一反三。概要本篇主要介绍中文分词器ik-analyzer的安装使用、自定义词库以及热...原创 2020-03-28 10:50:02 · 874 阅读 · 0 评论 -
Elasticsearch系列---前缀搜索和模糊搜索
概要本篇我们介绍一下部分搜索的几种玩法,我们经常使用的浏览器搜索框,输入时会弹出下拉提示,也是基于局部搜索原理实现的。前缀搜索我们在前面了解的搜索,词条是最小的匹配单位,也是倒排索引中存在的词,现在我们来聊聊部分匹配的话题,只匹配一个词条中的一部分内容,相当于mysql的"where content like ‘%love%’",在数据库里一眼就能发现这种查询是不走索引的,效率非常低。El...原创 2020-03-22 08:42:54 · 1075 阅读 · 0 评论 -
Elasticsearch系列---近似匹配
概要前面的match查询只能告诉我们,搜索的文档里有这些关键词,但无法告知词语之间的顺序,而不同的词语顺序表达的意思可能完全相反。我们想要的,是跟我们期望搜索的语义要相似,这就需要短语匹配和近似匹配来控制了。短语搜索短语搜索即把一小段话完完整整地进行搜索,必须保证被搜索的文档内有一模一样的才行,如下:GET /music/children/_search{ "query": { ...原创 2020-03-22 08:41:37 · 730 阅读 · 0 评论 -
Elasticsearch系列---多字段搜索
概要本篇介绍一下multi_match的best_fields、most_fields和cross_fields三种语法的场景和简单示例。最佳字段bool查询采取"more-matches-is-better"匹配越多分越高的方式,所以每条match语句的评分结果会被加在一起,从而为每个文档提供最终的分数_score。能与两条语句同时匹配的文档会比只与一条语句匹配的文档得分要高,但有时这样也...原创 2020-03-22 08:19:14 · 858 阅读 · 0 评论 -
Elasticsearch系列---深入全文搜索
概要本篇介绍怎样在全文字段中搜索到最相关的文档,包含手动控制搜索的精准度,搜索条件权重控制。手动控制搜索的精准度搜索的两个重要维度:相关性(Relevance)和分析(Analysis)。相关性是评价查询条件与结果的相关程度,并对相关程度进行排序,一般使用TF/IDF方法。分析是指将索引文档与查询条件规范化的一个过程,目的是建立倒排索引时,尽可能地提升召回率。match查询原理匹配查...原创 2020-03-03 07:48:19 · 1068 阅读 · 0 评论 -
Elasticsearch系列---实战搜索语法
概要本篇介绍Query DSL的语法案例,查询语句的调试,以及排序的相关内容。基本语法空查询最简单的搜索命令,不指定索引和类型的空搜索,它将返回集群下所有索引的所有文档(默认显示10条):GET /_search{}搜索多个索引GET /index1,index2/_doc/_search{}指定分页搜索GET /_search{ "from": 0, "s...原创 2020-01-01 15:52:57 · 1148 阅读 · 0 评论 -
Elasticsearch系列---定制mapping
概要本篇接着前一篇内容,继续介绍mapping信息,重点倾向于自定义mapping、自定义对象以及数组集合类的底层结构。自定义mapping上一篇文章介绍的都是Elasticsearch的自动mapping,我们在创建索引时,可以先指定好mapping的信息,还是以music索引为例:PUT /music{ "mappings": { "children": { ...原创 2019-12-27 07:29:36 · 1158 阅读 · 0 评论 -
Elasticsearch系列---初识mapping
概要本篇简单介绍一下field数据类型mapping的相关知识。mapping是什么?前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于JSON里的field类型,存储到ES里是什么类型,中间是怎么做的映射,这个映射过程,就是mapping要解决的问题。mapping简单来说,就是解决JSON文本内容到field类型映射关系的定义。将...原创 2019-12-27 07:15:14 · 1197 阅读 · 0 评论 -
Elasticsearch系列---倒排索引原理与分词器
概要本篇主要讲解倒排索引的基本原理以及ES常用的几种分词器介绍。倒排索引的建立过程倒排索引是搜索引擎中常见的索引方法,用来存储在全文搜索下某个单词在一个文档中存储位置的映射。通过倒排索引,我们输入一个关键词,可以非常快地获取包含这个关键词的文档列表。我们先看英文的,假设我们有两个文档:I have a friend who loves smilelove me, I love you...原创 2019-12-23 08:05:05 · 1024 阅读 · 0 评论 -
Elasticsearch系列---搜索分页和deep paging问题
概要本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例。搜索分页语法Elasticsearch中search语法有from和size两个参数用来实现分页的效果:size:显示应该返回的结果数量,默认是10。from:显示查询数据的偏移量,即应该跳过的初始结果数量,默...原创 2019-12-20 07:14:56 · 630 阅读 · 0 评论 -
Elasticsearch系列---初识搜索
概要本篇主要介绍搜索的报文结构含义、搜索超时时间的处理过程,提及了一下多索引搜索和轻量搜索,最后将精确搜索与全文搜索做了简单的对比。空搜索搜索API最简单的形式是不指定索引和类型的空搜索,它将返回集群下所有索引的所有文档(默认显示10条):GET /_search响应的结果示例(有筛选,只取了一条document作为示例):{ "took": 2, "timed_out": f...原创 2019-12-20 07:06:02 · 1111 阅读 · 0 评论 -
Elasticsearch系列---增量更新原理及优势
概要本篇主要介绍增量更新(partial update,也叫局部更新)的核心原理,介绍6.3.1版本的Elasticsearch脚本使用实例和增量更新的优势。增量更新过程与原理简单回顾前文我们有简单介绍过增量的语法,简单回顾一下请求示例:POST /music/children/1/_update{ "doc": { "length": "76" }}一般从客户...原创 2019-12-05 07:54:34 · 2658 阅读 · 0 评论 -
Elasticsearch系列---并发控制及乐观锁实现原理
概要本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理,列举常见的电商场景,关系型数据库的并发控制、ES的并发控制实践。并发场景不论是关系型数据库的应用,还是使用Elasticsearch做搜索加速的场景,只要有数据更新,并发控制是永恒的话题。当我们使用ES更新document的时候,先读取原始文档,做修改,然后把document重新索引,如果有多人同时在做相同的操作,...原创 2019-12-05 07:38:24 · 1125 阅读 · 0 评论 -
Elasticsearch系列---全面了解Document
概要本篇主要介绍一下document的知识,对document的元数据和基本的语法进行讲解。document核心元数据前面入门实战一节有简单介绍过document数据示例,这次我们来详细了解一下它的核心元数据,查询响应报文如下:{ "_index": "music", "_type": "children", "_id": "1", "_version": 1, "fo...原创 2019-11-29 07:22:21 · 1265 阅读 · 0 评论 -
Elasticsearch系列---分布式架构机制讲解
概要本篇主要介绍Elasticsearch的数据索引时的分片机制,集群发现机制,primary shard与replica shard是如何分工合作的,如何对集群扩容,以及集群的容错机制。分片机制前面基本概念一节中,我们有提到建立索引时,会自动将数据拆分到多个分片(shard)中,默认数量是5,这个就是索引数据分片机制。我们在往Elasticsearch集群插入数据,并没有关心过数据最终落地...原创 2019-11-22 22:10:26 · 497 阅读 · 0 评论 -
Elasticsearch系列---常见搜索方式与聚合分析
概要本篇主要介绍常见的6种搜索方式、聚合分析语法,基本是上机实战,可以和关系型数据库作对比,如果之前了解关系型数据库,那本篇只需要了解搜索和聚合的语法规则就可以了。搜索响应报文以上篇建立的music索引为例,我们先看看搜索结果的属性都有哪些{ "took": 1, "timed_out": false, "_shards": { "total": 5, "suc...原创 2019-11-22 21:54:05 · 1103 阅读 · 0 评论 -
Elasticsearch系列---简单入门实战
概要本篇主要介绍一下Elasticsearch Document的数据格式,在Java应用程序、关系型数据库建模的对比,介绍在Kibana平台编写Restful API完成基本的集群状态查询,Document最基本CRUD操作示例以及bulk批处理示例。Document数据格式Java应用系统的数据模型都是面向对象的,有些对象比较复杂,传统的业务系统,数据需要落地到关系型数据库,在数据库领域...原创 2019-11-19 08:13:34 · 1091 阅读 · 0 评论 -
Elasticsearch系列---Elasticsearch的基本概念及工作原理
基本概念Elasticsearch有几个核心的概念,花几分钟时间了解一下,有助于后面章节的学习。NRTNear Realtime,近实时,有两个层面的含义,一是从写入一条数据到这条数据可以被搜索,有一段非常小的延迟(大约1秒左右),二是基于Elasticsearch的搜索和分析操作,耗时可以达到秒级。Cluster集群,对外提供索引和搜索的服务,包含一个或多个节点,每个节点属于哪个集群是...原创 2019-11-15 07:35:08 · 1185 阅读 · 0 评论 -
Elasticsearch系列---初识Elasticsearch
Elasticsearch是什么?Elasticsearch简称ES,是一个基于Lucene构建的开源、分布式、Restful接口的全文搜索引擎,还是一个分布式文档数据库。天生就是分布式、高可用、可扩展的,可以在很短的时间内存储、搜索和分析大量的数据。什么是全文搜索?全文搜索也叫全文检索,是指扫描文章中的每一个词,对每一个词进建立一个索引,指明该词在文章中出现的次数和位置,当前端用户输入的关...原创 2019-11-14 08:15:41 · 1151 阅读 · 0 评论 -
记一次ES查询数据突然变为空的问题
基本环境elasticsearch版本:6.3.1客户端环境:kibana 6.3.4、Java8应用程序模块。其中kibana主要用于数据查询诊断和查阅日志,Java8为主要的客户端,数据插入和查询都是由Java实现的。案例介绍使用elasticsearch存储订单的主要信息,document内的field,基本上是long或keyword,创建索引的order.json文件如下...原创 2019-11-05 07:31:37 · 3019 阅读 · 0 评论 -
Elasticsearch系列---补充几个知识点
概要bulk api有趣的json格式前面《简单入门实战》一节中,有介绍bulk的使用示例,大家一定很奇怪,还有这么有趣的JSON格式,必须严格照他的换行来做,我想把JSON搞得美观可读性好一点,居然给我报错!{"action": {"meta"}}\n{"data"}\n{"action": {"meta"}}\n{"data"}\n它为什么要这样规定?我们想想bulk设计的...原创 2019-12-19 07:38:20 · 940 阅读 · 0 评论