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背景的开发者,在 ...
随机推荐
- oracle提交commit后回退恢复
-------------------------------------------------------begin---------------------------------------- ...
- C++ STD Gems03
transform.for_each #include <iostream> #include <vector> #include <string> #includ ...
- POJ - 1742 Coins(dp---多重背包)
题意:给定n种硬币的价值和数量,问能组成1~m中多少种面值. 分析: 1.dp[j]表示当前用了前i种硬币的情况下,可以组成面值j. 2.eg: 3 10 1 3 4 2 3 1 (1)使用第1种硬币 ...
- HDU - 1150 Machine Schedule(二分匹配---最小点覆盖)
题意:有两台机器A和B,A有n种工作模式(0~n-1),B有m种工作模式(0~m-1),两台机器的初始状态都是在工作模式0处.现在有k(0~k-1)个工作,(i,x,y)表示编号为i的工作可以通过机器 ...
- Tensorflow学习教程------变量
#coding:utf-8 import tensorflow as tf x = tf.Variable([1,2]) a = tf.constant([3,3]) #增加一个减法op sub = ...
- Mysql--主库不停机搭建备库
参考:http://blog.csdn.net/luozuolincool/article/details/38494817 mysqldump --skip-lock-tables --single ...
- GoF 23种设计模式概述
本文的结构: 一.设计模式总览 二.创建型设计模式 Creational Patterns 三.结构型设计模式 Structural Patterns 四.行为型设计模式 Behavioral Pat ...
- Iterator迭代器,获取集合元素
* Object next() :返回下一个元素 * boolean hasNext():判断时是否有元素可以获取 public static void main(String[] args ...
- UVA 12663 第九届省赛 高桥与低桥 线段树
题意很简单,n个桥的高度是事先给出来的,然后有m次涨水与落水的高度,问有多少座桥在这m次涨落之后 被淹超过了k次,如果某桥本身被水淹了,此时再涨水,就不能算多淹一次 看下数据10的五次方,10的五次方 ...
- 题解 P1019 【单词接龙】
题目 单词具体是什么不重要,知道单词间如何转化即可 [分析] 先理清一下题意: \(n\)个单词,每个单词限用两次 上一个单词能与下一个单词接上,当且仅当上一个单词的末尾 \(k\) 个字符与下一个单 ...