ES对比两个索引的数据差
一、前言
我们在修改索引的mapping
后,为了不影响线上的服务,一般需要新建索引,然后刷新数据过去,然而新索引的数据是否正常,跟旧索引数据比起来差异在哪里,这块总是难以验证。
有幸参考大佬的文章,具体实施了以下两个方案,对比新旧索引的数据,大佬文章链接:图解 | Elasticsearch 获取两个索引数据不同之处的四种方案
二、kibana的方式
1. kibana对比两个索引的数据差
有时候我们需要对比两个索引的字段差,比如两个索引Id
的差,从而找到缺失的数据,我们可以用下面这个sql
搞定。(本地或者其他环境均可以使用该方法)
(1)打开kibana的dev tools
(2)输入以下sql
(3)index_old,index_new是要对比的索引名称
(4)id 是对比的字段,最好是业务上的唯一字段
(5)执行,查看结果即可。
原理:使用聚合的方式,如果两个索引id相同,则聚合结果为2.我们查询聚合结果<2的数据,那么结果里面就是缺失的id.POST index_new,index_old/_search
{"size": 0,"aggs": {"group_by_uid": {"terms": {"field": "id","size": 1000000},"aggs": {"count_indices": {"cardinality": {"field": "_index"}},"values_bucket_filter_by_index_count": {"bucket_selector": {"buckets_path": {"count": "count_indices"},"script": "params.count < 2"}}}}}
}
结果:
注意:这里的 "key" : 6418 就代表差值里面有id为6418的记录,需要自己去检查为什么会出现差异。。{"took" : 1851,"timed_out" : false,"_shards" : {"total" : 10,"successful" : 10,"skipped" : 0,"failed" : 0},"hits" : {"total" : 21969,"max_score" : 0.0,"hits" : [ ]},"aggregations" : {"group_by_uid" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : 6418,"doc_count" : 1,"count_indices" : {"value" : 1}},{"key" : 6419,"doc_count" : 1,"count_indices" : {"value" : 1}}
}}}
二、其他轮子
github: esdiff
ps:这个插件的作者就是olivere/elastic 的作者,大佬出品,可以一试
1、本地使用步骤
1.下载
go install github.com/olivere/esdiff@latest2.执行命令
./esdiff -u=true -d=false 'http://localhost:9200/index_old/type' 'http://localhost:9200/index_new/type'3.效果
Unchanged 1
Updated 3 {*diff.Document}.Source["message"]:-: "Playing the piano is fun as well"+: "Playing the guitar is fun as well"Created 4 {*diff.Document}:-: (*diff.Document)(nil)+: &diff.Document{ID: "4", Source: map[string]interface {}{"message": "Climbed that mountain", "user": "sandrae"}}
2.常用参数
新增或者删除字段的时候,使用exclude
或者include
比较好用,对比指定字段之外的数据准确性。
esdiff [flags] <source-url> <destination-url>-dsort string [根据destination索引字段排序] {"term":{"name.keyword":"Oliver"}}
-ssort string [根据source索引字段排序]"id" or "-id"
-exclude string [source中排除某些字段]"hash_value,sub.*"
-include string [source中包含某些字段] "obj.*"
3.自定义文档Id
由于博主目前文档的ID
字段是根据索引名来的,比如:
//虽然id都是1,但是文档Id不一样,导致会出现在差异中
index_old_1
index_new_1
我们的需求主要是对比source
里面的字段,因此新增了-replace-with
参数,指定唯一ID
.
例如:
//使用id来替换文档ID,实现source字段的对比,获取差异go run main.go -ssort=unit_id -dsort=unit_id -replace-with=id'http://localhost:9200/index_old/type' 'http://localhost:9200/index_new/type'
4.轮子对比差异原理
1.根据参数批量读取es数据,使用scroll游标查询,默认一次100条
2.使用go-cmp包的cmp.Equal(srcDoc.Source, dstDoc.Source) 对比数据
3.根据参数打印created,updated,deleted等差异数据
end
ES对比两个索引的数据差相关推荐
- python快速对比两个excel的数据是否一致
python快速对比两个excel的数据是否一致 功能概述 导入包 封装函数 程序开始 功能概述 两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致. 输 ...
- 对比两张表的数据并筛选出数据不同的
描述: 表A和表B的主键A1和B1是相同的,现在需要A2和B2比较,A3和B3比较,将A2不等于B2和A3不等于B3的数据从表A中筛选出来.这样的SQL语句怎么写? SQL语句对比两张表的数据并筛选出 ...
- 快速对比两张工作表数据差异——《超级处理器》应用
如何快速对比两个工作表数据差异?比如,有下面两张表,一张是审核前的,一张是审核后的,怎么快速找出两张表中不同的单元格. 生产报表审核后 生产报表审核前 我们很难一眼看出两个表的差异,我们用超级处理器来 ...
- Oracle 对比两张表的数据是否一致
使用 minus 关键字(minus:差别,缺少) 有两张表CHECK_CITY_1和CHECK_CITY_2,现在要互相对比一下,两个表数据的差异,(即A中有哪些B里没有,B中有哪些A中没有) se ...
- Excel 2010 VBA 入门 082 数据处理之对比两个表的数据
示例: 如图所示,该工作簿中有两个来自不同数据源的材料表,这两个表中的数据可能不同.如何使用VBA比较两张表的编号与数量,并建立一张对照表,分别列出两张表的不同:编号同时存在但数量不同:编号在其中一张 ...
- wps excel中怎样对比两列中的数据,并且把相同的数据粘贴在结果列。
应项目需要,要对导入数据同excel数据进行比对. 之前用同事电脑用office比对过,我自己电脑只有wps,首次用wps进行数据比对. 1.将要比对的数据置于同一个excel中 2.在结果列输入函数 ...
- Python实现对比两个Excel数据内容并标出不同
导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...
- 【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)
1.应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的 ...
- ES数据库重建索引——Reindex(数据迁移)
一.应用背景 ES在创建好索引后,mapping的properties属性类型是不能更改的,只能添加.如果说需要修改字段就需要重新建立索引然后把旧数据导到新索引. 1.当你的数据量过大,而你的索 ...
最新文章
- (转)解决ubuntu下拼音输入法出错的问题
- java报错只有一个数字4,Java 报错 illegal Key Size
- 通过ezjail创建和管理jail虚拟机
- python中关键字 表示空类型_Python小知识:如何在Python 3中转换数据类型
- 一篇文章把Self-Attention与Transformer讲明白
- 关于优酷SDK之setOnADPlayListener
- android 如何使用android:supportsRtl属性
- dicom格式怎么转换_QQ音乐下载的歌曲怎么转换MP3?音频转换格式详细教程
- 区块链教程Fabric1.0源代码分析流言算法Gossip服务端二
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
- 两家大型网贷平台竟在借款人审核问题上“偷懒”?
- gdal 压缩tif_Python | GDAL处理影像
- 智能合约开发solidity编程语言实例
- phpadmin 安装
- 字体系列之字体大小(CSS、HTML)
- flexsim怎么设置传送带方向_Flexsim_编程常用代码
- 抖音推荐的背后原理——大数据+推荐
- TCP socket 中的长连接与短连接的区别
- 批量爬取网站图片-“优美库”篇(爬虫实战)
- Java系统程序Bug解决方法论(一) - 教程简介
热门文章
- 张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士
- 木头打大孔的新方法-燃烧法
- 转 TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
- win服务器系统2012和2016,将 Windows Server 2012 升级到 Windows Server 2016
- WebGL编程指南-30 三维物体雾化效果,立方体雾化效果
- ​保时捷拟IPO:估值或超800亿美元 与大众有多年恩怨情仇
- 国产积木---克尔维特(多图流量预警)
- 输入圆锥体的半径和高,并求体积
- 量子计算机的相干特征,几乎不受损耗和退相干影响的量子态,旨在推动量子计算机发展!...
- 单片机中断系统应用实例(两组实验+Proteus仿真+C源程序)