Elasticsearch
文章平均质量分 76
分享自己ES学习和应用心得
lucasma.eth
这个作者很懒,什么都没留下…
展开
-
Elasticsearch集群安全防护提出几个建议
写在前面2017年1月爆发了Elasticsearch数据勒索事件,涉及到的数据至少500亿条,被删除数据至少450TB。如何提高Elasticsearch应用的安全性,是开发者和客户都面临的重要问题。本文针对ES集群的安全防护提出几个方案,当然并不说只有这些方案,仅仅是个人的一些经验而已。用户角色和权限管理这个方案用来控制用户在 Elasticsearch中的权限。通过设置不同的角色,然后把对应的功能分配给不同的角色,再赋予不同用户不同角色。这样可以达到为不同的用户开通不同操作权限的目的。比如可原创 2021-05-07 20:33:11 · 543 阅读 · 1 评论 -
Elasticsearch之利用bulk提高写入性能(含源码分析)
什么是bulk操作bulk是批量的意思,也就是把原来单个的操作打包好,通过批量的api提交到ES集群。下面是个示例:单个操作:PUT my-index-000001/_doc/1{ "@timestamp": "2099-11-15T13:12:00", "message": "GET /search HTTP/1.1 200 1070000", "user": { "id": "kimchy" }}bulk操作:POST _bulk{ "index" : { "_原创 2021-03-23 21:57:10 · 2933 阅读 · 1 评论 -
如何提高Elasticsearch搜索的相关性
什么是相关性首先需要了解什么是相关性?默认情况下,搜索返回的结果是按照 相关性 进行排序的,也就是最相关的文档排在最前。相关性是由一个所谓的打分机制决定的,每个文档在搜索过程中都会被计算一个_score字段,这是一个浮点数类型,值越高表示分数越高,也就是相关性越大。具体的评分算法不是本文的重点,但是我们可以通过一个查询示例了解下评分的过程。ES对于一次搜索请求提供了一种explain的机制,设置为true的情况下,查询结果会额外输出一些信息,我们一起来看下这些信息。查询的demo是,GET kiba原创 2021-03-04 09:07:49 · 823 阅读 · 1 评论 -
一文带你彻底搞懂Elasticsearch中的模糊查询
一文带你彻底搞懂Elasticsearch中的模糊查询写在前面Elasticsearch(以下简称ES)中的模糊查询官方是建议慎用的,因为的它的性能不是特别好。不过这个性能不好是相对ES自身的其它查询(term,match)而言的,如果跟其它的搜索工具相比ES的模糊查询性能还是不错的。ES都多种方法可以支持模糊查询,比如wildcard,query_string等,这篇文章可能是全网最全的关于模糊查询的技术博客(哈哈)。可以支持模糊查询的方案wildcardwildcard的用法是这样的,GE原创 2021-02-22 19:39:33 · 25614 阅读 · 1 评论 -
详细说说ES的source字段(含源码分析)
Elasticsearch(以下简称ES)里的source字段用来存储文档的原始信息,默认是开启的。因为大部分场景下我们都需要这个字段,有时候反而容易被忽略。这篇文章尽量详细说说关于source的相关知识点。比如我们写入两篇文档,PUT student/_doc/1{ "name":"Jack", "age": 15, "like": "hiking,basketball"}PUT student/_doc/2{ "name":"Tom", "age": 16, "l原创 2021-02-03 19:18:00 · 7094 阅读 · 1 评论 -
Function score查询的应用及源码解析
概念介绍function_score查询可以在原有的查询结果算分的基础上,对每个文档计算一个新的算分,而计算的规则取决于应用的具体的funcion以及相关的一些选项。看一个例子,GET kibana_sample_data_ecommerce/_search?{ "query": { "function_score": { "query": { "match": { "manufacturer": "Elitelligence"原创 2021-01-18 22:26:02 · 620 阅读 · 0 评论 -
Elasticsearch中keyword和numeric对性能的影响分析
初学者认为这两个关键字的没啥关系,一个是用于字符串的精确匹配查询,一个是数字类型的字段用在计数的场景,比如说博客的点赞数,订单金额等。但是有些场景似乎两个关键字都可以用,比如电商场景下的订单状态,一般我们也是用数字表示不同的状态,比如1表示待支付,2表示支付成功。第一反应是用Byte(属于numeric),没有问题。但是用keyword是否可以呢?numeric除了支持等值精确查询,还可以范围查询。但是大部分情况下我们业务场景对于订单状态的使用都是精确查询的,不会有大于某个状态或者小于某个状态这样的情况原创 2021-01-18 22:18:04 · 3759 阅读 · 0 评论 -
Elasticsearch源码分析-关于action
ES源码分析-关于actionES源码版本 7.10启动过程中的action比如我们有个搜索请求:curl -X GET "localhost:9200/blogs/_search?pretty" -H 'Content-Type: application/json' -d'{ "query": { "function_score": { "query": { "match": { "content": "elasticsearch"原创 2021-01-12 20:09:11 · 572 阅读 · 0 评论 -
如何在本地电脑搭建ES伪集群环境
文章目录前言方案一、多端口本地模拟集群方案二、使用docker本地搭建集群前言正所谓工欲善其事必先利其器,因为ES认证考试都是实操题目,想要考出一个好成绩必须具备一个集群环境可以实操练习。我猜想应该很多人没有条件操作真实的集群环境,所以准备一个本地的伪集群环境是必不可少的。我准备考试的时候,ES官方指引上写明了考试的版本是ES7.2,所以我下面也是用这个版本为例说明如何在本地搭建集群环境。之所以叫伪集群,是因为它不是真实的多节点集群。而是本地电脑通过一些手段模拟出的集群架构。我打算介绍两种本地搭建原创 2020-12-26 22:35:36 · 1236 阅读 · 0 评论 -
Elasticsearch中关于JVM和垃圾回收的介绍
关于堆内存大小的设置ES官方建议JVM中设置的最大堆内存大小,不超过节点RAM的一半,最大不超过32GB,并且Xms和Xmx相等。我们一个个说明。首先为啥建议Xms和Xmx相等,这其实是个约定的配置了。并不仅限于ES,很多基于JAVA的服务在生产环境中都是建议这个配置。核心的原因在于减少JVM的时间开销,因为当Xms不够用时,JVM会继续想OS申请内存,这必然会带来额外的时间开销。如果你预测你的应用最终差不多用到Xmx,把这两个值设置成一样是个比较好的选择。不超过系统RAM的一半,这个主要是出于文件系原创 2020-12-23 08:51:40 · 1013 阅读 · 0 评论 -
今天,成为了一名Elastic认证工程师
今天通过了Elasticsearch的官方工程师认证考试,还是非常兴奋的。确实,能够成为一名 Elastic 认证工程师也是很多开发者的梦想。因为这个认证本身难度非常高,考察点涉及ES知识的方方面面,包括集群,搜索,聚合,索引设计等非常全面,而且全部是实操题目。平时工作中没有实操经验可以肯定是通不过的。这是 Elastic 的最高认证,在业界大家也比较认可。对于我自身来说,拿到这个认证使我更加有动力,有积极性在ES领域持续的深耕,学习!下面晒晒我的徽章。后面我准备写一个系列文章,把自己在准备ES认证原创 2020-12-13 19:05:34 · 1009 阅读 · 2 评论 -
提高Elasticsearch性能的几个建议
下面是根据自己工作中的一些经验总结出来一些影响Elasticsearch(以下简称ES)性能的建议。文章目录集群状态信息集群的节点角色禁用内存交换利用doc values集群分配相关的属性集群回复相关的一些属性线程池属性防止数据丢失集群状态信息大部分人会注意到索引,分片的大小。我们在官网或者很多博客文章上都能看到建议的分片大小。但是集群的状态信息大小往往容易被忽略。集群的状态信息保存着所有索引的mapping信息(当然还有其它信息)。如果mapping定义的过大会导致状态信息过大。而这些状态信息会在原创 2020-10-21 23:14:59 · 983 阅读 · 0 评论 -
总结一些ES不常用的filter
写在前面ES内置的token filter很多,大部分实际工作中都用不到。这段时间准备ES认证工程师的考试,备考的时候需要熟悉这些不常用的filter。ES官方对一些filter只是一笔带过,我就想着把备考的笔记整理成博客备忘,也希望能帮助到有这方面需求的人。length filer官方解释:A token filter of type length that removes words that are too long or too short for the stream.这个filte原创 2020-09-29 23:33:45 · 888 阅读 · 0 评论 -
ES对磁盘的要求都有哪些,大部分你可能不知道
写在前面有一个问题被关注的比较少,就是ES对本地磁盘的占用情况。有人可能觉得这个问题的答案显而易见,不就是ES软件本身占用的空间,还有索引数据持久化占用的磁盘空间,另外就是一些日志了。事实上,关于ES占用磁盘空间的问题远比这个要复杂的多。本篇文章就想聚焦这个问题,深入ES的底层原理来分析磁盘的占用情况。正文是否执行分析首先对于一个索引,其中的字段在写入是,写入分析对磁盘是有影响的。那么什么是写入分析? 当我们index一个文档时,如果不指定分析器,默认使用的是standard,可以做个测试,看下默原创 2020-09-14 22:54:43 · 1273 阅读 · 0 评论 -
ES数组类型字段搜索以及数组空值搜索
本篇是有一个问题引出的,在ES中文论坛看到这个样一个问题:es存储的某一个字段值为数组,现搜索的时候需要搜索出结果该字段值为空或包含某几个值的数据,该怎么写例如: “job_type” : [“12”,“49”,“67”] 或者 “job_type” : [ ]需要搜出job_type中包含49的或者为空的数据这个问题其实涉及好几个相关的知识点。ES对于数组类型的写入和查询是怎样的如何查询数组为空的记录在ES中,没有专门的数组数据类型,但是默认情况下,任意一个字段都可以包含0或多个值,原创 2020-09-10 22:08:18 · 8560 阅读 · 3 评论 -
Elasticsearch查询优化指南
现在越来越多海量的数据需要被传输,存储,管理和分析。只有那些具备分布式和并行处理能力的系统才能担此大任。而这其中就有一款开源产品叫Elasticsearch(以下简称ES)。本文主要关注如何通过配置(包括索引维度,集群维度等)来优化ES的查询性能。索引配置ES默认给每个索引分配5个主分片和1个副本分片。这样的配置并不能适配所有的业务场景,我们需要根据实际情况进行配置。物理限制分片的大小对查询效率的影响是非常大的。如果一个索引上有很多非常小的分片,这些分片上的segment容易增长的过快最终超过限制转载 2020-09-09 21:12:01 · 986 阅读 · 0 评论 -
ES系列之原来copy_to用好了这么香
写在前面Elasticsearch(以下简称ES)有个copy_to的功能,之前在一个项目中用到,感觉像是发现了一个神器。这个东西并不是像有些人说的是个语法糖。它用好了不但能提高检索的效率,还可以简化查询语句。基本用法介绍直接上示例。先看看mapping,PUT my_index{ "mappings": { "properties": { "first_name": { "type": "text", "copy_to": "full_n原创 2020-09-04 09:12:14 · 7519 阅读 · 3 评论 -
讲得最明白的Elasticsearch源码调试环境搭建教程
写在前面使用elasticsearch(以下简称ES)也有挺长时间了,一直想找机会深入源码研究下。我看源码有个习惯,就是一定要运行起来。不是只把源码下载下来看看就行的。搭建整个调试环境几乎花了一整天的功夫,这里记录下,希望能帮到需要的人。环境介绍MAC Mojave系统idea 2019.2JDK版本: jdk12elasticsearch 版本:7.1.0gradle 版本:5.2.1源码下载可以直接去github下载指定release版本的源码,也可以直接clone目前的mast原创 2020-08-16 10:34:00 · 1782 阅读 · 3 评论 -
spring data操作ES简直不能再香
引言Elasticsearch(以下简称ES)并不像mysql这么容易上手,很多java程序员会觉得ES的java客户端比较难以掌握,尽管ES 7.x官方推荐的high level client已经相对于早期的TransportClient好用很多了。Spring Boot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持,我们几乎可以像操作数据库一样操作ES了。本篇文章是我肝了4个小时写出的文章,希望能对大家有所帮助。看这篇文章的小伙伴,我假设是对ES有基本原创 2020-06-27 11:19:20 · 10309 阅读 · 5 评论 -
给你总结几个ES下最容易踩的坑
我本人接触Elasticsearch(一下简称ES)有挺长一段时间了,本文结合自己的一些项目经验,给你总结几个实际项目中比较容易踩到的坑。希望读者能够避免犯这样的错误。坑一,时区问题在我们的项目中,索引下一般都会存在一个时间的字段,这个字段可以用来排序,或者做时间范围查询,或者聚合的场景等都会用到。ES底层默认采用UTC时间格式,而中国的时间(CST)是CST=UTC+8所以实际的项目中经常遇到查询结果和自己期望的不一致。关于时区的问题以及如何解决,我之前专门写了一篇文章,感兴趣的可以看看:E原创 2020-05-30 19:43:16 · 2807 阅读 · 5 评论 -
ES系列之利用filter让你的查询效率飞起来
bool查询简介Elasticsearch(下面简称ES)中的bool查询在业务中使用也是比较多的。在一些非实时的分页查询,导出的场景,我们经常使用bool查询组合各种查询条件。Bool查询包括四种子句,mustfiltershouldmust_not我这里只介绍下must和filter两种子句,因为是我们今天要讲的重点。其它的可以自行查询官方文档。must, 返回的文档必须满足must子句的条件,并且参与计算分值filter, 返回的文档必须满足filter子句的条件。但是跟Mus原创 2020-05-11 20:53:44 · 15434 阅读 · 5 评论 -
什么鬼?ES主分片和副本大小居然不一样!
引言很多认为Elasticsearch(以下简称ES),同一个分片的主分片和副本分片文档数量肯定是样的,数据大小也是一样的。这个其实值说对了一半,文档数量是一阳台的没错,但是数据大小不一定一样。产生这种现象的原因在于,主分片和副本分片的segment数量可能不一样。正文我们来看个示例。以下的示例测试环境是ES 7.1.0版本先插入4个文档,PUT my_blog/_doc/1{...原创 2020-05-05 17:38:00 · 1566 阅读 · 0 评论 -
关于kibana的可视化可能都在这篇文章里了
引言kibana是elasticsearch(以下简称ES)的可视化平台,笔者平时使用kibana的dev tools比较多,在这里可以更便捷的使用ES的各种命令,DSL查询语句等。但是kibana的可视化功能远不止于次。Kibana可以用来搜索,查看ES索引中的数据,可以轻松地进行高级数据分析,并可在各种图表,表格和地图中显示数据。并且可以基于浏览器的界面快速创建和共享动态仪表板,实时反馈E...原创 2020-05-02 20:17:22 · 3113 阅读 · 3 评论 -
ES分页看这篇就够了
有时候我们会遇到一些业务场景,需要进行很深度的分页,但是可以不指定页数翻页,只要可以实时请求下一页就行。比如一些实时滚动的场景原创 2020-04-12 23:01:18 · 16665 阅读 · 6 评论 -
ES系列之原来查看文档数量有这么多姿势
1、引言有人可能觉得,查看文档数量不是很简单吗?直接GET /_cat/count/index_name?v不就可以了吗。事实上远不止这么简单,比如嵌套文档的情况等。相信你看了我这篇文章之后你会感叹原来统计文档有这么多讲究啊。2、正文cat/count首先是最常用的的方式,也是一种快速查询文档的优先推荐方式,cat count api我们使用kibana自带的电商索引来实验。GE...原创 2020-04-03 20:14:27 · 10759 阅读 · 7 评论 -
ES系列之嵌套文档和父子文档
需求背景很多时候mysql的表之间是一对多的关系,比如订单表和商品表。一笔订单可以包含多个商品。他们的关系如下图所示。ElasticsSearch(以下简称ES)处理这种关系虽然不是特别擅长(相对于关系型数据库),因为ES和大多数 NoSQL 数据库类似,是扁平化的存储结构。索引是独立文档的集合体。不同的索引之间一般是没有关系的。不过ES目前毕竟发展到7.x版本了, 已经有几种可选的方式能...原创 2020-03-26 19:45:47 · 12424 阅读 · 9 评论 -
ES系列之一文带你避开日期类型存在的坑
ES系列之一文带你避开日期类型存在的坑概述时间相关的字段是ElasticsSearch(以下简称ES)最常用的字段了,几乎所有的索引应用场景都会有时间字段,一般用于基于时间范围的搜索,聚合等场景。但是由于时区的问题,相信很多小伙伴都踩到过时间字段的坑,笔者自己就踩过。本文希望给你提供一个避坑指南。了解时区的基本概念因为本文不是专门讲时区的,你只需要了解一些基本的概念就可以了。我们知道...原创 2020-03-19 00:07:28 · 2979 阅读 · 2 评论 -
ES系列之原来ES的聚合统计不准确啊
本篇文章不是讲ElasticSearch(下面简称ES)聚合分析的基本概念和用法的,这些网上的资料很多,不清楚的可以自行查阅。我下面聚合分析使用的数据都是kibana自带的,这样方便有些读者实际测试文中的示例。基本概念ES为了满足搜索的实时性,在聚合分析的一些场景会通过损失精准度的方式加快结果的返回。这其实ES在实时性和精准度中间的权衡。需要明确的是,并不是所有的聚合分析都会损失精准度,比...原创 2020-03-15 21:41:20 · 7478 阅读 · 3 评论 -
Elasticsearch对比TiDB
笔者做过的一个项目中,同时用到了Elasticsearch和Tidb两种存储相关的产品。这两者适用的场景有些差异,但其实又有交集。前者偏向搜索,后者则主打分布式存储。下面根据自己的理解从不同维度分析下二者的相同点和不同点。对比维度ElasticsearchTiDB产地公司现在的名称是Elastic,其实它的员工遍布世界各地,一般认为公司的总部是阿姆斯特丹公司是PinCa...原创 2020-03-08 15:40:52 · 4272 阅读 · 4 评论 -
一文带你彻底弄懂ES中的doc_values和fielddata
基本概念这两个概念比较像,所以大部分时候会放在一起说。这两个概念源于Elasticsearch(后面简称ES)除了强大的搜索功能外,还可以支持排序,聚合之类的操作。搜索需要用到倒排索引,而排序和聚合则需要使用 “正排索引”。说白了就是一句话,倒排索引的优势在于查找包含某个项的文档,而反过来确定哪些项在单个文档里并不高效。doc_values和fielddata就是用来给文档建立正排索引的。他...原创 2020-02-01 16:30:02 · 13336 阅读 · 0 评论 -
Elasticsearch java API客户端介绍
基本上官方指南就已经向我们说明了一切。如下图所示:从官方指南上,ES的java 客户端分为两个大类。分别是:Java REST ClientJava API下面分别说下这两种有什么区别。Java API在ES 7.0之前最常采用的API,基于TransportClient客户端。网上大部分ES 客户端的资料基本都是基于它的。这种方式在ES 7.x后已经不被官方推荐,且在8.0版本...原创 2019-12-23 19:32:16 · 593 阅读 · 0 评论 -
使用kafka连接器迁移mysql数据到ElasticSearch
文章目录概述过程详解准备连接器工具数据库和ES环境准备配置连接器启动测试概述把 mysql 的数据迁移到 es 有很多方式,比如直接用 es 官方推荐的 logstash 工具,或者监听 mysql 的 binlog 进行同步,可以结合一些开源的工具比如阿里的 canal。这里打算详细介绍另一个也是不错的同步方案,这个方案基于 kafka 的连接器。流程可以概括为:mysql连接器监听数...原创 2019-12-10 20:23:02 · 816 阅读 · 0 评论 -
阿里云Elasticsearch性能优化实践
Elasticsearch是一款流行的分布式开源搜索和数据分析引擎,具备高性能、易扩展、容错性强等特点。它强化了Apache Lucene的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次。本文结合开源社区和阿里云平台的实践经验,探讨如何调优Elasticsearch的性能提高索引和查询吞吐量。一. Elasticsearch部署建议 1.选择合理的硬件配置,尽可能使用SSD ...转载 2019-11-19 08:54:39 · 1008 阅读 · 0 评论