背景:现在有一个业务,派件业务,业务员今天去派件(扫描产生一条派件记录),派件可能会有重复派件的情况,第二天再派送(记录被更新,以最新的派件操作为准)。现在需要分业务员按天统计每天的派件数量。
es版本:7.15.1
1、创建索引:

PUT t_test_001
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"city_id": {
"type": "long"
},
"city_name": {
"type": "keyword"
},
"create_time": {
"type": "date"
},
"push_date": {
"type": "date"
},
"update_time": {
"type": "date"
}
}
}
}

2、插入测试数据

POST /t_test_001/_bulk
{ "index": {}}
{ "order_no" : 1,"employee":"张三", "create_time" : "2021-12-06T08:00:00.000Z", "push_date" : "2021-12-06T08:00:00.000Z", "update_time" : "2021-12-06T08:00:00.000Z"}
{ "index": {}}
{ "order_no" : 2,"employee":"张三", "create_time" : "2021-12-06T08:00:00.000Z", "push_date" : "2021-12-06T08:00:00.000Z", "update_time" : "2021-12-06T08:00:00.000Z"}
{ "index": {}}
{ "order_no" : 3,"employee":"张三", "create_time" : "2021-12-07T00:00:00.000Z", "push_date" : "2021-12-07T00:00:00.000Z", "update_time" : "2021-12-07T00:00:00.000Z"}
{ "index": {}}
{ "order_no" : 4,"employee":"张三", "create_time" : "2021-12-07T00:00:00.000Z", "push_date" : "2021-12-07T00:00:00.000Z", "update_time" : "2021-12-07T00:00:00.000Z"}
{ "index": {}}
{ "order_no" : 5,"employee":"王五", "create_time" : "2021-12-06T08:00:00.000Z", "push_date" : "2021-12-06T08:00:00.000Z", "update_time" : "2021-12-06T08:00:00.000Z"}
{ "index": {}}
{ "order_no" : 6,"employee":"王五", "create_time" : "2021-12-06T08:00:00.000Z", "push_date" : "2021-12-06T08:00:00.000Z", "update_time" : "2021-12-06T08:00:00.000Z"}
{ "index": {}}
{ "order_no" : 7,"employee":"王五", "create_time" : "2021-12-07T00:00:00.000Z", "push_date" : "2021-12-07T00:00:00.000Z", "update_time" : "2021-12-07T00:00:00.000Z"}
{ "index": {}}
{ "order_no" : 8,"employee":"王五", "create_time" : "2021-12-07T00:00:00.000Z", "push_date" : "2021-12-07T00:00:00.000Z", "update_time" : "2021-12-07T00:00:00.000Z"}

3、查询一下看看

GET /t_test_001/_search
{
"size": 10
}

结果:

{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 8,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "GLztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 1,
"employee" : "张三",
"create_time" : "2021-12-06T08:00:00.000Z",
"push_date" : "2021-12-06T08:00:00.000Z",
"update_time" : "2021-12-06T08:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "Gbztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 2,
"employee" : "张三",
"create_time" : "2021-12-06T08:00:00.000Z",
"push_date" : "2021-12-06T08:00:00.000Z",
"update_time" : "2021-12-06T08:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "Grztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 3,
"employee" : "张三",
"create_time" : "2021-12-07T00:00:00.000Z",
"push_date" : "2021-12-07T00:00:00.000Z",
"update_time" : "2021-12-07T00:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "G7ztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 4,
"employee" : "张三",
"create_time" : "2021-12-07T00:00:00.000Z",
"push_date" : "2021-12-07T00:00:00.000Z",
"update_time" : "2021-12-07T00:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "HLztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 5,
"employee" : "王五",
"create_time" : "2021-12-06T08:00:00.000Z",
"push_date" : "2021-12-06T08:00:00.000Z",
"update_time" : "2021-12-06T08:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "Hbztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 6,
"employee" : "王五",
"create_time" : "2021-12-06T08:00:00.000Z",
"push_date" : "2021-12-06T08:00:00.000Z",
"update_time" : "2021-12-06T08:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "Hrztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 7,
"employee" : "王五",
"create_time" : "2021-12-07T00:00:00.000Z",
"push_date" : "2021-12-07T00:00:00.000Z",
"update_time" : "2021-12-07T00:00:00.000Z"
}
},
{
"_index" : "t_test_001",
"_type" : "_doc",
"_id" : "H7ztkn0BDKE3xmcewwIG",
"_score" : 1.0,
"_source" : {
"order_no" : 8,
"employee" : "王五",
"create_time" : "2021-12-07T00:00:00.000Z",
"push_date" : "2021-12-07T00:00:00.000Z",
"update_time" : "2021-12-07T00:00:00.000Z"
}
}
]
}
}

4、创建一个transform,将数据按天、业务员  聚合

PUT _transform/t_test_transform
{
"id": "t_test_transform",
"source": {
"index": [
"t_test_001"
]
},
"dest": {
"index": "t_test_x"
},
"frequency": "60s",
"sync": {
"time": {
"field": "update_time",
"delay": "60s"
}
},
"pivot": {
"group_by": {
"employee": {
"terms": {
"field": "employee"
}
},
"push_date": {
"date_histogram": {
"field": "push_date",
"calendar_interval": "1d"
}
}
},
"aggregations": {
"sum_all": {
"value_count": {
"field": "_id"
}
}
}
}
}

5、开启transform

POST _transform/t_test_transform/_start

6、查看transform转换的索引结果

GET /t_test_x/_search
{}

结果:如图,张三2021-12-06和07号各派送两单:

7、12月7号,订单order_no = 1的单子再次被张三派送;数据被更新

POST /t_test_001/_update/GLztkn0BDKE3xmcewwIG
{
"doc": {
"push_date": "2021-12-07T03:27:12.000Z",
"update_time": "2021-12-07T03:27:12.000Z"
}
}

注意模拟操作数据的真实性,更新时间在上一个检查点之后!

8、预期transfrom转换的结果是张三12-6号的派单统计数据由2减少为1;12-7号的派单数据从2增加到3。

9、查询transform转换的索引结果

GET /t_test_x/_search
{}

结果:张三12-6号的派单统计数据为2没有减少,不符合预期;12-7号的派单数据为3,符合预期。

10,再查询一下原始数据:

GET /t_test_001/_search
{}

11、再统计一下数据:

GET /t_test_001/_search
{
"size": 0,
"aggs": {
"employee": {
"terms": {
"field": "employee"
},
"aggs": {
"push_date": {
"date_histogram": {
"field": "push_date",
"calendar_interval": "1d"
}
}
}
}
}
}

结果很显然:张三 12-06号配送量为1,12-07号配送量为3!!!而transform统计的结果,此时就错了!!!这个怎么理解呢?是他es的transform不支持这种场景数据变化的聚合,还是说这是一个bug呢?我理解,可能是因为考虑到性能的原因,es的transform在这种场景下是有这种问题的。

若有错误之处,望大家指正。谢谢。

Elasticsearch中关于transform的一个问题?的更多相关文章

  1. ELASTICSEARCH 中暂时移除一个节点

    ELASTICSEARCH 中暂时移除一个节点 版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 前言 在维护ES集群的过程中,我们会经常遇到将某个ES实 ...

  2. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

  3. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

  4. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作

    http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...

  5. 一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)

    欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...

  6. Elasticsearch中使用groovy脚本处理boolean字段的一个问题

    Elasticsearch中使用groovy脚本获取文档的bool字段值时,得到的值是字符的 'T' 或者 'F' ,而不是bool值 true 和 false . 比如文档中有一个字段是 { &qu ...

  7. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

  8. elasticsearch中常用的API

    elasticsearch中常用的API分类如下: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作,查看索引信息等 查看API: ...

  9. elasticsearch中的API

    elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...

随机推荐

  1. Python hashlib Unicode-objects must be encoded before hashing

    Python2中没有这个问题 python3中 hashlib.md5(data)函数中data 参数的类型应该是bytes hash前必须把数据转换成bytes类型 Python 2.7.12 (d ...

  2. hdu 2795 Billboard(单点更新,区间查询)

    题意: h*w的白板. 有n个广告牌,每个广告牌是1*wi.必须放置在白板的upmost中的leftmost. 输出n个广告牌放置在第几行.如果放不下,输出-1. 数据规格: h, w, and n ...

  3. java容器之HashMap

    HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的. 解决哈希冲突的三个方法: a.开放 ...

  4. 印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常

    前言 最近,我们部门负责项目运维的小王频频接到甲方的反馈,运行的项目使用谷歌浏览器登录后,每次点击处理2秒后,浏览器自动闪退崩溃.小王同学折腾了一个星期,还没找到问题的原因.甲方客户都把问题反馈给项目 ...

  5. 【Python+postman接口自动化测试】(6)Chrome开发者工具

    Chrome开发者工具 Elements: HTML元素面板,用于定位查看元素源代码 Console: js控制台面板,js命令行,查看前端日志 Sources: 资源面板,用于断点调试js Netw ...

  6. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还 ...

  7. 『学了就忘』Linux基础命令 — 38、Linux中光盘的挂载

    目录 步骤一:创建一个空目录 步骤二:找到光盘的设备文件名称 步骤三:挂载光盘 步骤四:访问关盘中的数据 步骤五:卸载挂载点 问题:挂载点为什么要使用空目录 提示:关于Linux系统中光盘的挂载,我们 ...

  8. python微服务

    https://realpython.com/python-microservices-grpc/ https://github.com/saqibbutt/python-flask-microser ...

  9. 如何解决Redis缓存雪崩、缓存穿透

    缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓存失 ...

  10. JAVA线上常见问题排查手段(小结)

    在平时开发过程中,对于线上问题的排查以及系统的优化,免不了和Linux进行打交道.每逢大促和双十一,对系统的各种压测性能测试,优化都是非常大的一次考验.抽空整理了一下自己在线上问题排查以及系统优化的一 ...