一、前言

我们在修改索引的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对比两个索引的数据差相关推荐

  1. python快速对比两个excel的数据是否一致

    python快速对比两个excel的数据是否一致 功能概述 导入包 封装函数 程序开始 功能概述 两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致. 输 ...

  2. 对比两张表的数据并筛选出数据不同的

    描述: 表A和表B的主键A1和B1是相同的,现在需要A2和B2比较,A3和B3比较,将A2不等于B2和A3不等于B3的数据从表A中筛选出来.这样的SQL语句怎么写? SQL语句对比两张表的数据并筛选出 ...

  3. 快速对比两张工作表数据差异——《超级处理器》应用

    如何快速对比两个工作表数据差异?比如,有下面两张表,一张是审核前的,一张是审核后的,怎么快速找出两张表中不同的单元格. 生产报表审核后 生产报表审核前 我们很难一眼看出两个表的差异,我们用超级处理器来 ...

  4. Oracle 对比两张表的数据是否一致

    使用 minus 关键字(minus:差别,缺少) 有两张表CHECK_CITY_1和CHECK_CITY_2,现在要互相对比一下,两个表数据的差异,(即A中有哪些B里没有,B中有哪些A中没有) se ...

  5. Excel 2010 VBA 入门 082 数据处理之对比两个表的数据

    示例: 如图所示,该工作簿中有两个来自不同数据源的材料表,这两个表中的数据可能不同.如何使用VBA比较两张表的编号与数量,并建立一张对照表,分别列出两张表的不同:编号同时存在但数量不同:编号在其中一张 ...

  6. wps excel中怎样对比两列中的数据,并且把相同的数据粘贴在结果列。

    应项目需要,要对导入数据同excel数据进行比对. 之前用同事电脑用office比对过,我自己电脑只有wps,首次用wps进行数据比对. 1.将要比对的数据置于同一个excel中 2.在结果列输入函数 ...

  7. Python实现对比两个Excel数据内容并标出不同

    导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...

  8. 【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)

    1.应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的 ...

  9. ES数据库重建索引——Reindex(数据迁移)

    一.应用背景    ES在创建好索引后,mapping的properties属性类型是不能更改的,只能添加.如果说需要修改字段就需要重新建立索引然后把旧数据导到新索引. 1.当你的数据量过大,而你的索 ...

最新文章

  1. (转)解决ubuntu下拼音输入法出错的问题
  2. java报错只有一个数字4,Java 报错 illegal Key Size
  3. 通过ezjail创建和管理jail虚拟机
  4. python中关键字 表示空类型_Python小知识:如何在Python 3中转换数据类型
  5. 一篇文章把Self-Attention与Transformer讲明白
  6. 关于优酷SDK之setOnADPlayListener
  7. android 如何使用android:supportsRtl属性
  8. dicom格式怎么转换_QQ音乐下载的歌曲怎么转换MP3?音频转换格式详细教程
  9. 区块链教程Fabric1.0源代码分析流言算法Gossip服务端二
  10. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
  11. 两家大型网贷平台竟在借款人审核问题上“偷懒”?
  12. gdal 压缩tif_Python | GDAL处理影像
  13. 智能合约开发solidity编程语言实例
  14. phpadmin 安装
  15. 字体系列之字体大小(CSS、HTML)
  16. flexsim怎么设置传送带方向_Flexsim_编程常用代码
  17. 抖音推荐的背后原理——大数据+推荐
  18. TCP socket 中的长连接与短连接的区别
  19. 批量爬取网站图片-“优美库”篇(爬虫实战)
  20. Java系统程序Bug解决方法论(一) - 教程简介

热门文章

  1. 张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士
  2. 木头打大孔的新方法-燃烧法
  3. 转 TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
  4. win服务器系统2012和2016,将 Windows Server 2012 升级到 Windows Server 2016
  5. WebGL编程指南-30 三维物体雾化效果,立方体雾化效果
  6. ​保时捷拟IPO:估值或超800亿美元 与大众有多年恩怨情仇
  7. 国产积木---克尔维特(多图流量预警)
  8. 输入圆锥体的半径和高,并求体积
  9. 量子计算机的相干特征,几乎不受损耗和退相干影响的量子态,旨在推动量子计算机发展!...
  10. 单片机中断系统应用实例(两组实验+Proteus仿真+C源程序)