elasticsearch 大集群,双重别名,滚动更新分词方案
elasticsearch 滚动更新分词
国内用ik、hanlp、ansj或基于其二次开发的比较多
必然有分词变更的操作(主要是是加词)
reindex+别名可以解决一部分问题,但在大集群上会影响业务
elasticsearch写入数据时会对原始数据作分词,检索时会对查询条件作分词,以两次的分词算匹配度打分
以加词为例
加词后会导致数据大幅波动(因为查询语句的的分词结果变了,但原始数据的分词信息并没有变,同样一条查询条件,在加词前后的结果并不一致),影响产品应用和聚合统计结果,
轻微的波动,可以解释为正常产品优化,导致50%以上甚至100%的数据波动,很难向用户解释
加词只是导致数据波动的一个最常见的原因,更改了原生的分词算法,也会导致这种结果
因此动态加词,热更新不适于这种场景
而常见的reindex+别名操作,不适合reindex耗时严重的大数据集群
常规的静态加词(把新增词加入es ik plugin要求的目录下,或直接打进jar包)需要
1暂停服务
2更新词包
3滚动更新节点(使新增词生效),恢复es服务,这里可以恢复es服务,但恢得后会有数据波动问题存在
4重建历史索引
理论上很简单,但只限于数据量很小的情况下,提前通知,暂停个小半天维护或选择非工作日也能说得过去
数据量极大的情况下,重建历史索引耗时数周,影响正常使用,一般在国庆和春节这种长假期操作
es集群为基础服务团队维护,长久以来基本也是这种操作,基础服务团队通常只提供一个通用的解决方案,不会根据业务场景作优化调整,也不清楚产品和业务上的痛点
之前由导致的数据波动问题,严重的由专人负责,通过调整查询规则,减少波动的影响,不严重的就完全没人负责
该方案毕竟不可控,以前这里由运维统一负责,个人也懒得花心思,年前公司有放出风来要由产品线接手,个人也不想总这么折腾,就得想办法解决
实际办法很简单,没有任何技术难度,只是些应用技巧
之所以有数据波动是因为同一个analyzer加词前后行为不一致,让analyzer保持一致就可以了,索引时分词和查询时分词用的算法一致,就不会有波动问题
以ik的ik_max_word为例
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}'
前后不一致只是因为ik_max_word的行为变了,但更新词包又不是必须要变更ik_max_word
重建索引,是用加词后的analyzer重建,而并不是一定要用ik_max_word来实现
elasticsearch 大集群,双重别名,滚动更新分词方案的更多相关文章
- Elasticsearch--集群管理_别名&插件&更新API
目录 使用索引别名 别名 创建别名 修改别名 合并命令 获取所有别名 移除别名 别名中过滤 别名和路由 Elasticsearch插件 基础知识 安装插件 移除插件 更新设置API 使用索引别名 通过 ...
- docker swarm集群搭建以及使用滚动更新
基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...
- Kubernetes集群中Service的滚动更新
Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经“全天候化”,为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足 ...
- Elasticsearch集群使用ik分词器
IK分词插件的安装 ES集群环境 VMWare下三台虚拟机Ubuntu 14.04.2 LTS JDK 1.8.0_66 Elasticsearch 2.3.1 elasticsearch-jdbc- ...
- 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作
剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存 ...
- Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)
一. ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...
- 解剖 Elasticsearch 集群 - 之一
解剖 Elasticsearch 集群 - 之一 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论底层的存储模型以及 CRUD(创建.读取.更新 ...
- 剖析Elasticsearch集群系列之一:Elasticsearch的存储模型和读写操作
转载:http://www.infoq.com/cn/articles/analysis-of-elasticsearch-cluster-part01 1.辨析Elasticsearch的索引与Lu ...
- ElasticSearch集群故障案例分析: 警惕通配符查询
最近ElasticSearch集群出现了 https://elasticsearch.cn/article/171 文章中描述的情况,现在转载全文警示下自己. 许多有RDBMS/SQL背景的开发者,在 ...
随机推荐
- HTML笔记及案例
- 了解什么是标记语言 - 了解HTML主要特性,主要变化以及发展趋势 - 了解HTML的结构标签 - 掌握HTML的主要标签(字体,图片,列表,链接,表单等标签) ### 1.网站信息页面 #### ...
- C++中的string详解
标准库类型string表示可变长的字符序列,为了在程序中使用string类型,我们必须包含头文件: #include <string> 声明一个字符串 声明一个字符串有很多种方式,具体如 ...
- jQuery选择器全解析
1. 基本选择器 1.1 id选择器:$(#id) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- 什么是控制反转IOC
1.IOC 是什么 IOC- Inversion of Control , 即“控制反转” ,不是一个技术,而是一个设计思想,在java 开发中,IOC意味着将你设计好的Java 对象交个容器控制,而 ...
- [C/C++]编程规范一:头文件篇
一般来说,每一个.cc或者.cpp文件对应一个头文件(.h文件),当然,也有例外,例如一些测试单元或者main文件,头文件的一些规范可以令代码可读性.程序的性能等大为改观,所以还是要注意头文件的规范问 ...
- 给adobe acrobat reader 添加图片注释
首先展示一下 我添加注释的结果, 下面是我的做法: 在Adobe Acrobat 中打开Sample.pdf文档,点开文档右边的“工具”-“内容”-选择“编辑对象”,鼠标光标变成实心箭头+右下角小方 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 验证 API
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: DOM - 改变 HTML
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- bootstrap 基础表单
表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各不相同,而且不同的浏览器对表单控件渲染的风格都各有不同. ☑ LESS版本:对应源文 ...
- h5-边框图片
1.边框图片详解 <style> *{ ; ; } div{ width: 900px; height: 900px; margin: 100px auto; border: 133px ...