少林码僧
专注elasticsearch搜索领域8年,有海量数据搜索功能架构经验
展开
-
Elasticsearch 磁盘空间异常排查过程
分片大小差不多的情况下,节点 76 的分片数还比别的节点还少 10 个左右,它的磁盘空间反而多占用了 8TB。这是不是太奇怪了?事出反常必有妖,继续往下查。原创 2024-08-12 07:00:00 · 1138 阅读 · 0 评论 -
ik_smart 与 ik_max_word到底有啥区别?
可以看出 ik_max_word 分词器把所有的字典结果都匹配出来了,同时也看到了好几个词元的位置是有重叠的,比如:“中华人民”“中华”“华人”这几个词元,位置在0-4这段有着不同的重叠。我们先来看 ik_max_word 的切分模式:执行文本的最细粒度分割,将分段详尽地生成各种可能的组合。来看下“中华人民共和国国歌”的例子,这里为了更加直观的体现字典树的匹配模式,我们把字典库的内容也列出来。ik_smart 的分词结果并不是 ik_max_word 的分词结果的子集。原创 2024-08-02 15:53:58 · 973 阅读 · 0 评论 -
Elasticsearch的Index sorting 索引预排序会导致索引数据的移动吗?
首先通过refresh在内存中生成新的Segment段时,由于段数据是此时生成的,很容易确保段数据是有序的,此外在段合并的过程中涉及到端数据的重整,这时候也可以确保合并后的新段的数据是有序的。但是我们知道,Elasticsearch的Segment段数据是不可变的,这是为了写入的时候可以进行顺序写而提高磁盘的IO效率,同时可以提高段文件的缓存命中率,不至于一条数据被修改,整个段的数据缓存都要失效的情况。可以想象一个链表结构,如果需要确保它的有序性,在插入新数据的时候需要对链表节点进行移动。原创 2024-05-23 10:05:09 · 171 阅读 · 0 评论 -
match_phrase查不到?match_phrase查询规则详解
"title":{"fields":{},},这里,为了验证分词,同时使用了ik_smart和ik_max两种分词。实际开发中不需要,因为:两种分词共存,会导致导入数据创建索引的时候,索引会非常大,对磁盘和检索性能都会有影响。原创 2024-04-11 14:52:19 · 117 阅读 · 0 评论 -
不停止业务的情况下优化 Elasticsearch Reindex
在使用 Elasticsearch 时,我们总有需要修改索引映射的时候,这时我们只能进行 _reindex。事实上,这是一个相当昂贵的操作,因为根据数据量和分片数量,完整复制一个索引可能需要几个小时。花费的时间不是大问题,但更严重的是,它会影响生产环境的性能甚至功能。相信大家都明白,数据迁移会消耗大量硬盘资源,肯定会影响性能,但功能呢?让我们以常规的 _reindex 为例。假设我们在索引上创建了一个别名。如果没有别名,我们就有大麻烦了。常规的reindex程序分为两个步骤。原创 2023-12-28 14:52:32 · 1211 阅读 · 0 评论 -
Elasticsearch集群规划及节点角色规划最佳实践
ES集群规划及节点角色规划最佳实践原创 2021-11-25 20:58:06 · 311804 阅读 · 0 评论 -
elasticsearch-py 8.x的一些优势
早在 2022 年 2 月,当 Elasticsearch 8.0 发布时,Python 客户端也发布了 8.0 版本。它是对 7.x 客户端的部分重写,并带有许多不错的功能(如下所述),但也带有弃用警告和重大更改。今天,客户端的 7.17 版本仍然相对流行,每月下载量超过 100 万次,占 8.x 下载量的 ~50%。根据我作为 urllib3 维护者的经验,我知道投资 urllib3 2.0 迁移指南 1 并帮助用户迁移是有回报的。原创 2023-12-22 14:16:29 · 9151 阅读 · 0 评论 -
提升Elasticsearch性能的一些经验
档,然后下次查询中会对之前已经返回的文档进行忽略过滤,同时在。原创 2023-12-21 15:51:50 · 1209 阅读 · 0 评论 -
Elasticsearch的批量bulk 提交 写入的方式会有顺序问题吗?
比如发送到节点的时间,节点本身的空闲资源情况等。这句话的大概意思是,bulk的index操作性能是高于单文档的index操作的。所以在大量重复id的情况下,会大量触发refresh操作,(不重复的情况就不会)产生很多小的segments,然后又触发很多segment merge操作。要理解其中的缘由,首先必须了解ES的update操作,是先get出来最新的文档,然后在内存里更新,最后再写回去。ES官方是建议在业务场景允许的情况下,尽量使用bulk操作来提高index的性能,官方文档是这么说的。原创 2023-12-18 14:55:15 · 1128 阅读 · 0 评论 -
Go集成elasticsearch8极简demo,光速入门
编辑器添加goproxy。原创 2023-12-18 14:46:36 · 539 阅读 · 0 评论 -
8年ES运维经验整理出的Elasticsearch运维手册(超实用)
k1 : 控制非线性词频率归一化(饱和),Elasticsearch中默认值为1.2。用人能看懂的话说就是词语在文档中出现的次数对于得分的重要性。例如说我觉得在某些场景,一个搜索词在文档中出现越多则越接近我希望搜索的内容,就可以将这个参数调大一点。b :控制文档长度对于分数的惩罚力度。变量b处于分母上,它乘以刚刚讨论过的字段长度的比值,Elasticsearch中的b 默认值为0.75。如果b较大,则文档长度相对于平均长度的影响更大。原创 2023-12-15 17:50:32 · 1368 阅读 · 0 评论 -
Elasticsearch磁盘占用大于95%时将所有索引置为只读
从stackoverflow上查到,当Elasticsearch所在磁盘占用大于等于95%时,Elasticsearch会把所有相关索引自动置为只读。(Elasticsearch官方文档有介绍)发现确实这个索引的 read_only_allow_delete 属性是 true,由此导致了无法再向其中插入文档。建议采用第一种,注意解决之后,需要手动把被锁的索引的只读模式关闭。可是这个索引自从创建,从来也没有修改过配置,为什么忽然报错呢?看错误信息大意是要操作的索引是只读的,不能进行插入或删除。原创 2023-12-15 17:36:03 · 780 阅读 · 0 评论 -
Elasticsearch的 8.x常用api汇总
基本查询有两种语法:左侧的简单语法,不能使用任何选项, 右边有一个扩展的。接收 true, false 或者设置一个固定的值,默认是 10000.查看索引信息(包括缓存大小,数据大小,分片在节点的分布,索引健康状态等)1. 32g以内,超过则jvm无法使用压缩指针,导致堆内存利用率变低。具有聚合、突出显示、过滤的完整搜索示例......,关于 Elastic 的重要内容来源;,快速启动任何 Elastic 软件;注意:只有部分舒心支持动态更新。创建文档(自动生成的 ID)手动刷新到OS cacche。原创 2023-12-15 17:07:58 · 1140 阅读 · 0 评论 -
究竟什么是分片,它是如何工作的?
它可以存储一个计数 包含每个术语的文档,一个术语在特定术语中出现的次数 文档,每个文档中术语的顺序,每个文档的长度, 所有文档的平均长度等。文本字段中的每个单词都需要是可搜索的, 这意味着数据库需要能够在单个字段中索引多个值(在本例中为单词)。文档更新的工作方式与此类似:当文档更新时,旧的 文档的版本被标记为已删除,而新版本的 文档在新区段中编制索引。句段是不可变的,因此无法从较旧的句段中删除文档, 也无法更新较旧的句段以反映文档的较新版本。这样,新的 文档可以相对便宜地添加到索引中。原创 2023-12-14 16:16:48 · 923 阅读 · 0 评论 -
如何控制Elasticsearch搜索的相关性?
想象一下,我们有一个查询 will 的权重较低,而一个不常见的术语 like 将具有较高的权重。常用术语,如 或 contribute 与大多数文档相关的内容很少,因为它们出现在大多数文档中,而术语并不常见 喜欢或帮助我们放大最有趣的内容 文件。—— 处理向量的数学 - 提供用于比较向量的工具 多维向量之间的角度,这意味着我们可以将 上面对包含许多术语的查询解释的相同原则。时,我们实际上是在谈论 文档中的字段。每个字段都有自己的倒排索引,因此, 对于 TF/IDF 目的,字段的值是文档的值。原创 2023-12-14 16:11:16 · 1038 阅读 · 0 评论 -
Elasticsearch 8.10之前同义词最佳实践
顾客可能会使用不同的关键词搜索相同的产品。例如,他们可能搜索“冰箱”或“冷藏库”。通过使用同义词,电商平台可以确保无论客户使用哪种术语,都能找到相关的产品。例如:“画匠、画工、画师”三个是同义词,“番茄,西红柿”是同义词......人们可能使用不同的关键词来描述或搜索同一事件或主题。例如,“COVID-19”、“冠状病毒”和“新型冠状病毒”都可能指向与疫情相关的文章。某特定新闻场景下,中文和英文要做同义词处理,举例:科学 和 science 是同义词,数据 和 data 是同义词.....原创 2023-12-14 14:59:12 · 503 阅读 · 0 评论 -
Elasticsearch 内存故障排查实战
所有以下 cURL/API 请求都可以在 Elasticsearch Service >“API Console”(API 控制台)中作为 Elasticsearch API 的 cURL 发出,或者在 Kibana >“Dev Tools”(开发工具)下进行。如果这不是您第一次触发熔断器,或者您怀疑这会是一个持续存在的问题(例如,堆利用率持续保持在 85%,那么就是考虑扩展资源的时候了);这部分内存最大不超过物理 RAM 的一半,如果您确认是这种情况,就需要考虑一下,要么扩展集群,要么减少对集群的需求。原创 2023-05-12 11:29:02 · 447 阅读 · 1 评论 -
Elasticsearch8安全配置详解剖析
自建的Elasticsearch集群,从8.0版本开始,也默认地简化了安全功能,为用户用户认证、基于角色的访问控制进行用户授权、使用 TLS 加密的节点到节点通信、使用 HTTPS 与 Elasticsearch API 进行加密通信。为什么我们需要进行如此的安全配置,并启用SSL/TLS对Elasticsearch的服务进行认证与通信加密?总的来说,将Elasticsearch集群配置为使用HTTPS和TLS可以提高数据的保护和安全性,对于任何要求数据保密性的场合,都是一个重要的安全措施。原创 2023-04-12 17:02:36 · 1632 阅读 · 0 评论 -
Painless 脚本中ctx 和 doc,params._source到底有啥区别?
ctx.href.url 如果非空且 ctx.href.url 以 http 开头,则:href.insecure 设置为:true。上面脚本是借助 ingest pipelie 实现:取子串内容,源串为:“hello world”,取出后的子串为:“hello”。update / update / update_by_query / reindex 场景,使用:ctx._source;如上实例,借助 painless 脚本实现了获取日期类型数据的年份,是借助 getYear( ) 的函数实现的。原创 2023-02-23 19:56:34 · 405 阅读 · 0 评论 -
使用Testcontainers测试Elasticsearch插件
使用Testcontainers测试Elasticsearch插件。原创 2023-02-15 15:05:44 · 443 阅读 · 0 评论 -
Elasticsearch汉字补全和智能纠错使用详解
1. 需要一个搜索词库/语料库,不要和业务索引库在一起,方便维护和升级语料库2. 根据分词及其他搜索条件去语料库中查询若干条(京东13条、淘宝(天猫)10条、百度4条)记录返回3. 为了提升准确率,通常都是前缀搜索原创 2023-02-13 16:36:18 · 794 阅读 · 0 评论 -
Elasticsearch查询方法汇总
【代码】Elasticsearch查询方法汇总。原创 2023-02-10 10:45:29 · 400 阅读 · 0 评论 -
Elasticesearch内存详解
原理上可以理解为前缀树,加速查询。我们已经知道在elasticsearch中每个shard每隔1秒都会refresh一次,每次refresh都会生成一个新的segment,按照这个速度过不了多久segment的数量就会爆炸,所以存在太多的segment是一个大问题,因为每一个segment都会占用文件句柄,内存资源,cpu资源,更加重要的是每一个搜索请求都必须访问每一个segment,这就意味着存在的segment越多,搜索请求就会变的更慢。到了极端的情况,写入速度很高的时候,40%都被占用,导致OOM。原创 2023-02-09 11:37:17 · 1692 阅读 · 0 评论 -
Elasticsearch shard磁盘水位线详解
先回顾几个概念:ES的Index是个逻辑概念,实际由若干shard组成,而shard就是Lucene的Index,即真正存储数据的实体。当有数据需要存储的时候,就需要先分配shard。具体来说需要分配shard的场景包括:数据恢复,主分片(primary)、副本分片的分配,再平衡(rebalancing),节点的新增、删除。对于分布式存储系统来说,数据的分布非常重要,ES shard的分配工作由ES的master节点负责。原创 2023-02-08 14:16:25 · 964 阅读 · 0 评论 -
Elasticsearch分析器与算分详解
⼀、分析器1.1概念:分析器包括:1. 字符过滤器(CharacterFilters):⾸先,字符串按顺序通过每个 字符过滤器。他们的任务是在分词前整理字符串。⼀个字符过滤器可以⽤来去掉HTML,或者将 & 转化成 and;2. 分词器(Tokenizer):字符串被 分词器 分为单个的词条。得到分词,标记每个分词的顺序或位置(⽤于邻近查询),标记分词的起始和结束的偏移量(⽤于突出显⽰搜索⽚段),标记分词的类型;原创 2023-02-02 12:23:38 · 549 阅读 · 0 评论 -
Elasticsearch 7.3 的 offheap 原理
一直以来,ES 堆中常驻内存中占据比重最大是 FST,即 tip(terms index) 文件占据的空间,1TB 索引大约占用2GB 或者更多的内存,因此为了节点稳定运行,业界通常认为一个节点 open 的索引不超过5TB。现在,从 ES 7.3版本开始,将 tip 文件修改为通过 mmap 的方式加载,这使 FST占据的内存从堆内转移到了堆外由操作系统的 pagecache 管理。参考 ES 7.3 的 release-notes :现在我们来聊一聊其中的一些细节。hybridfs。原创 2022-09-14 13:10:39 · 549 阅读 · 0 评论 -
深入探究Elasticsearch查询毛刺
Lucene 并不是为低延迟而设计的系统,查询毛刺主要受 GC 和 IO 的影响,GC 层面在于合理的规划JVM内存,避免频繁 GC 和 FGC,IO 层面的可以考虑使用 SSD,RAMDISK 或预留足够的 pagecache来解决。原创 2022-09-14 13:03:17 · 491 阅读 · 0 评论 -
Elasticsearch磁盘占用大于95%时将所有索引置为只读问题
当Elasticsearch所在磁盘占用大于等于95%时,Elasticsearch会把所有相关索引自动置为只读。不管使用哪种方式,解决后需要将read_only_allow_delete设置成null,索引才会恢复正常写入。上面的read_only_allow_delete为true说明索引进入了只读状态。如果使用9300的tcp端口会出现类似下面的错误。写入数据会在集群的日志文件中发现类似下面的错误。可以通过下面的api查看当前索引状态。原创 2022-08-25 11:37:50 · 1197 阅读 · 0 评论 -
Elasticsearch Query条件执行顺序分析
在此阶段需要注意的最重要的一点是,匹配的文档分为两个阶段。首先是一个 approximations的过程(找到近似匹配的doc),它可以有效地迭代倒排中与查询匹配的文档的超集(超集包含着不匹配的doc),是因为这些超集的迭代是通过 nextDoc / advance来操作的。但实际情况要复杂一些。如果您读了上面的求交集如何执行的描述,则会发现 nextDoc()和 advance(target)的执行顺序是基于 cost()决定的,而 matches()的执行顺序是基于 matchCost()决定的。原创 2022-08-24 10:50:26 · 747 阅读 · 0 评论 -
Elasticsearch节点及存储规划建议
Elasticsearch是分布式多节点形式的集群,每个节点均是有计算和存储两部分构成,如何根据业务的需求,选择合适的配置,我们根据实际运营经验,在此提供一些 ES 常见使用场景下,配置选择的建议。您可以根据业务需要进行参考,当然,最好的方法还是需要您在业务的实际使用过程中逐步去探索。...原创 2022-08-18 16:30:38 · 149652 阅读 · 0 评论 -
使用 go-elasticsearch 实时同步 MySQL 数据到 ES
当需要把 MySQL 的数据实时同步到 ES 时,为了实现低延迟的检索到 ES 中的数据或者进行其它数据分析处理。本文给出以同步 mysql binlog 的方式实时同步数据到 ES 的思路,实践并验证该方式的可行性,以供参考。...原创 2022-08-18 16:18:17 · 148652 阅读 · 0 评论 -
记一次jdk BUG导致的ES节点无法启动的问题
Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at java.base/jdk原创 2022-07-06 15:17:45 · 148358 阅读 · 0 评论 -
elasticsearch SSL 证书过期解决办法
SSL 证书过期会导致:• 集群无法增加新节点• 安全漏洞破坏了证书链的信任。可以使用 SSL 证书API 检查证书到期时间原创 2022-07-04 09:48:18 · 2797 阅读 · 5 评论 -
如何不重启(不停机)Elasticsearch集群节点的情况下更换Elasticsearch集群节点角色
1、实战遇到的问题问题描述:如何在一个四个节点的集群中,将主节点中的数据分散到其他节点中去,最后主节点没有数据?问题细节:线上环境有4个节点,单节点为48核的物理机,252G的内存。数据每日增量不大,累计数据就一个TB左右。数据的类型为文书类数据。核心数据就一个索引,设置了48个分片。只设置了一个主节点(同时是数据节点),其余三个仅数据节点。2、问题解读抛开节点配置、集群部署层面的问题。问题转化为:主节点&数据节点角色的节点如何转化为仅主节点?3、模拟一把3.1 构建模拟环境原创 2021-11-25 21:24:30 · 312988 阅读 · 0 评论 -
第二节:elasticsearch集群的安装
最新版elasticsearch集群安装指南禁用swap临时关闭swap永久关闭swap确认swap已经关闭配置 swappiness禁用swap临时关闭swapsudo swapoff -a永久关闭swap以上命令在机器重启后会失效,要永久的停用 swap,可以通过编辑/etc/fstab 文件,注释文件中所有包含 swap 配置的行。例如:# /dev/mapper/vg_r160-lv_swap swap swap nosuid 0 0注释swap相关行 /mnt/swap swap原创 2021-10-24 23:57:39 · 347590 阅读 · 1 评论 -
Elasticsearch线上配置文件,elasticsearch.yml
cluster.name: testnode.name: 192-168-1-39path.data: /path/to/datapath.logs: /path/to/logsnetwork.host: 192.168.1.39http.port: 9200transport.tcp.port: 9300discovery.seed_hosts: ["192.168.1.39:9300", "192.168.1.39:9300"]cluster.initial_master_nodes原创 2021-10-24 23:24:29 · 349924 阅读 · 0 评论 -
elasticsearch6.x集群环境部署
elasticsearch集群部署安装jdkchmod 755 jdk-8u161-linux-x64.tar.gztar -zxvf jdk-8u161-linux-x64.tar.gzcp jdk1.8.0_161 /data/install创建elasticsearch执行用户useradd elasticmkdir /data/install/elasticchmod -...原创 2019-01-17 17:56:18 · 716 阅读 · 0 评论 -
Elasticsearch升级到7.15.1版本的步骤和注意事项
Elasticsearch升级版本的步骤和注意事项滚动升级支持的滚动升级:准备升级升级集群1. 禁用主分片分配2. 停止不必要的索引并执行同步刷新。(可选)3. 暂停与活动的机器学习作业和数据馈送相关的任务。(可选)4. 关闭单个节点。5. 升级关闭的节点6. 启动新升级的节点7. 重新启用分片分配8. 等待节点恢复9.其他每个节点重复4~8步骤逐个重复操作即可10.全部节点升级完成后,重新启动机器学习作业如果不支持滚动升级的版本只能通过reindex的方式重建索引到目标集群不是所有版本的Elastics原创 2021-10-27 16:31:07 · 212681 阅读 · 0 评论 -
Elasticsearch 安全功能使用指南
从 Elastic Stack 6.8 和 7.1 开始,我们在默认分发包中免费提供多项安全功能,例如 TLS 加密通信、基于角色的访问控制 (RBAC),等等。在此篇博文中,我们将会讲解如何启用这些功能来确保您的 Elasticsearch 集群的安全。为了给您提供一个实际示例来演示如何确保 Elastic Stack 实施项目的安全,我们将会在本地机器上创建一个两节点 Elasticsearch 集群并进行安全设置。要实现这一点,我们首先需要在两个节点之间配置 TLS 通信。然后,我们会为 Kiba原创 2020-08-12 14:25:19 · 1137 阅读 · 0 评论 -
elasticsearch7 集群搭建带安全验证
elasticsearch7 集群搭建教程环境准备1.配置JAVA_HOME2.下载es功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导...原创 2019-05-16 20:06:07 · 6205 阅读 · 11 评论