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 大集群,双重别名,滚动更新分词方案的更多相关文章

  1. Elasticsearch--集群管理_别名&插件&更新API

    目录 使用索引别名 别名 创建别名 修改别名 合并命令 获取所有别名 移除别名 别名中过滤 别名和路由 Elasticsearch插件 基础知识 安装插件 移除插件 更新设置API 使用索引别名 通过 ...

  2. docker swarm集群搭建以及使用滚动更新

    基础环境,三台虚拟机 172.17.3.70 172.17.3.71 172.17.3.72 系统配置:centos 7,关闭selinux 需要优化的基础配置: [root@sw1 ~]# vim ...

  3. Kubernetes集群中Service的滚动更新

    Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经“全天候化”,为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足 ...

  4. Elasticsearch集群使用ik分词器

    IK分词插件的安装 ES集群环境 VMWare下三台虚拟机Ubuntu 14.04.2 LTS JDK 1.8.0_66 Elasticsearch 2.3.1 elasticsearch-jdbc- ...

  5. 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作

    剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存 ...

  6. Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)

    一.  ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

  7. 解剖 Elasticsearch 集群 - 之一

    解剖 Elasticsearch 集群 - 之一 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论底层的存储模型以及 CRUD(创建.读取.更新 ...

  8. 剖析Elasticsearch集群系列之一:Elasticsearch的存储模型和读写操作

    转载:http://www.infoq.com/cn/articles/analysis-of-elasticsearch-cluster-part01 1.辨析Elasticsearch的索引与Lu ...

  9. ElasticSearch集群故障案例分析: 警惕通配符查询

    最近ElasticSearch集群出现了 https://elasticsearch.cn/article/171 文章中描述的情况,现在转载全文警示下自己. 许多有RDBMS/SQL背景的开发者,在 ...

随机推荐

  1. COGS 1489玩纸牌

    %%%http://blog.csdn.net/clover_hxy/article/details/53171234 #include<bits/stdc++.h> #define LL ...

  2. 数据库之存储过程Procedure

    数据库之存储过程 一.概述 SQLserver中视图通过简单的select查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到. 二.什么是存储过程 存储过程procedure是一组 ...

  3. Airflow 使用 Celery 时,如何添加 Celery 配置

    背景 前段时间我选用了 Airflow 对 wms 进行数据归档,在运行一段时间后,经常发现会报以下错误: [-- ::,: WARNING/ForkPoolWorker-] Failed opera ...

  4. [CISCN 2019 初赛]Love Math

    0x00 知识点 PHP函数: scandir() 函数:返回指定目录中的文件和目录的数组. base_convert() 函数:在任意进制之间转换数字. dechex() 函数:把十进制转换为十六进 ...

  5. Git--rebase合并提交

    参考 https://blog.csdn.net/hj7jay/article/details/78809547 https://blog.csdn.net/yangcs2009/article/de ...

  6. sendmail 的安装、配置与发送邮件的具体实现

    Ubuntu 中sendmail 的安装.配置与发送邮件的具体实现 centos安装sendmail与使用详解 CentOS下搭建Sendmail邮件服务器 使用外部SMTP发送邮件  使用mailx ...

  7. C++逐行读取txt

    C++读取txt文件的时候可以使用std::ifstream来实现,如果打开文件失败的话,其变量会是空的,所以可以用来判断是否打开成功.  #include <stdlib.h>  #in ...

  8. Scheduled定时任务器在Springboot中的使用

    Scheduled定时任务器是Spring3.0以后自带的一个定时任务器. 使用方式: 1.添加依赖 <!-- 添加 Scheduled 坐标 --> <dependency> ...

  9. Python语言基础与应用 (P16)上机练习:基本数据类型

    本文是笔者在学习MOOC课程<Python语言基础与应用> (北京大学-陈斌)中根据上机课时的要求写下在代码 课程总链接: 中国大学MOOC B站 本节课链接 数值基本运算: 33和7+, ...

  10. Java自学-泛型 泛型转型

    Java 中的子类泛型转型成父类泛型 步骤 1 : 对象转型 根据面向对象学习的知识,子类转父类 是一定可以成功的 package generic; import charactor.ADHero; ...