写点什么

笔记 20240611

作者:Geek_d01095
  • 2024-10-25
    辽宁
  • 本文字数:4379 字

    阅读完需:约 14 分钟

记一次 Elasticsearch 折叠查询,需求是根据索引中的 2 个字段进行折叠(collapse)查询,使用的 Elasticsearch 版本是 7.6.2


1 个字段折叠查询:

aggs 查询是为了统计折叠的数量,存在性能问题

inner_hits 是为了被折叠的数据局部排序取第一条


{    "from": 0,    "size": 2,    "sort": [        {            "updateTime": "desc"        }    ],    "query": {        "match_phrase": {            "requestBody.bizId.keyword": "402096417704790016"        }    },    "collapse": {        "field": "requestBody.bizId.keyword",        "inner_hits": {            "name": "sorted",            "sort": [                {                    "updateTime": "desc"                }            ],            "size": 1        }    },    "aggs": {        "biz_count": {            "terms": {                "field": "requestBody.bizId.keyword"            }        }    }}
复制代码


响应结果:


{    "took": 15,    "timed_out": false,    "_shards": {        "total": 1,        "successful": 1,        "skipped": 0,        "failed": 0    },    "hits": {        "total": {            "value": 31,            "relation": "eq"        },        "max_score": null,        "hits": [            {                "_index": "wf_process_instance",                "_type": "_doc",                "_id": "4f93b277-b431-11ed-8d05-0edcbd4615db",                "_score": null,                "_source": {                    "_class": "cn.yzw.iec.workflow.server.common.model.param.entity.ProcessEsInstance",                    "id": "4f93b277-b431-11ed-8d05-0edcbd4615db",                    "title": "招标执行-物资-无清单",                    "form": [],                    "fromUserId": 100001,                    "fromUserName": "{\"account\":\"jcadmin\",\"appId\":\"3009_qa\",\"id\":100001,\"name\":\"呵呵\",\"userSystem\":\"auac\"}",                    "handleUserIds": [],                    "startTime": 1677235940641,                    "updateTime": 1683636798250,                    "completeTime": 1677235984716,                    "handledUserIds": [                        10302007                    ],                    "processDefKey": "cn.yzw.cn.audit.14130",                    "processStatus": 3,                    "assigneeInfos": "[{\"userList\":[{\"orgName\":\"zyp审批中心测试上级组织(勿动)\",\"userName\":\"张奉先\",\"userId\":\"10302007\"}],\"level\":1,\"nodeKey\":\"Activity_AuditNode_43720\"}]",                    "requestBody": {                        "bizId": "402096417704790016",                        "requestType": 0,                        "orgCode": "00010100",                        "orgName": "中国建筑股份有限公司",                        "auditNodeCode": "contract_center_template",                        "auditNodeName": "合同模版审批",                        "bizDomainId": 1006,                        "applicationId": "522011",                        "tenantId": "cscec",                        "isRevoke": 1,                        "mobileTerminal": true                    },                    "bizId": "402096417704790016",                    "flowName": "合同模板审批流测试",                    "instanceNo": "CC1677235939948214020"                },                "fields": {                    "requestBody.bizId.keyword": [                        "402096417704790016"                    ]                },                "sort": [                    1683636798250                ],                "inner_hits": {                    "sorted": {                        "hits": {                            "total": {                                "value": 31,                                "relation": "eq"                            },                            "max_score": null,                            "hits": [                                {                                    "_index": "wf_process_instance",                                    "_type": "_doc",                                    "_id": "4f93b277-b431-11ed-8d05-0edcbd4615db",                                    "_score": null,                                    "_source": {                                        "_class": "cn.yzw.iec.workflow.server.common.model.param.entity.ProcessEsInstance",                                        "id": "4f93b277-b431-11ed-8d05-0edcbd4615db",                                        "title": "招标执行-物资-无清单",                                        "form": [],                                        "fromUserId": 100001,                                        "fromUserName": "{\"account\":\"jcadmin\",\"appId\":\"3009_qa\",\"id\":100001,\"name\":\"呵呵\",\"userSystem\":\"auac\"}",                                        "handleUserIds": [],                                        "startTime": 1677235940641,                                        "updateTime": 1683636798250,                                        "completeTime": 1677235984716,                                        "handledUserIds": [                                            10302007                                        ],                                        "processDefKey": "cn.yzw.cn.audit.14130",                                        "processStatus": 3,                                        "assigneeInfos": "[{\"userList\":[{\"orgName\":\"zyp审批中心测试上级组织(勿动)\",\"userName\":\"张奉先\",\"userId\":\"10302007\"}],\"level\":1,\"nodeKey\":\"Activity_AuditNode_43720\"}]",                                        "requestBody": {                                            "bizId": "402096417704790016",                                            "requestType": 0,                                            "orgCode": "00010100",                                            "orgName": "中国建筑股份有限公司",                                            "auditNodeCode": "contract_center_template",                                            "auditNodeName": "合同模版审批",                                            "bizDomainId": 1006,                                            "applicationId": "522011",                                            "tenantId": "cscec",                                            "isRevoke": 1,                                            "mobileTerminal": true                                        },                                        "bizId": "402096417704790016",                                        "flowName": "合同模板审批流测试",                                        "instanceNo": "CC1677235939948214020"                                    },                                    "sort": [                                        1683636798250                                    ]                                }                            ]                        }                    }                }            }        ]    },    "aggregations": {        "biz_count": {            "doc_count_error_upper_bound": 0,            "sum_other_doc_count": 0,            "buckets": [                {                    "key": "402096417704790016",                    "doc_count": 31                }            ]        }    }}
复制代码

问题:collapse 不支持多个独立字段的折叠查询!!!

  • 方法一:使用 runtime_mappings 在查询是动态添加字段


{    "from": 0,    "size": 2,    "sort": [        {            "updateTime": "desc"        }    ],    "query": {        "match_phrase": {            "requestBody.bizId.keyword": "402096417704790016"        }    },    "runtime_mappings": {        "my_biz": {            "type": "keyword",            "script": "doc['requestBody.bizId.keyword'].value + '+' + doc['requestBody.auditNodeCode.keyword'].value"        }    },    "collapse": {        "field": "requestBody.bizId.keyword",        "inner_hits": {            "name": "sorted",            "sort": [                {                    "updateTime": "desc"                }            ],            "size": 1        }    },    "aggs": {        "biz_count": {            "terms": {                "field": "requestBody.bizId.keyword"            }        }    }}
复制代码


响应结果:


{    "error": {        "root_cause": [            {                "type": "parsing_exception",                "reason": "Unknown key for a START_OBJECT in [runtime_mappings].",                "line": 14,                "col": 25            }        ],        "type": "parsing_exception",        "reason": "Unknown key for a START_OBJECT in [runtime_mappings].",        "line": 14,        "col": 25    },    "status": 400}
复制代码


runtime_mappings 是 elasticsearch 7.7 之后提出的功能,7.6.2 不支持!!!


  • 方法二:创建一个新的字段(Field),更新历史数据

发布于: 刚刚阅读数: 4
用户头像

Geek_d01095

关注

还未添加个人签名 2024-03-15 加入

还未添加个人简介

评论

发布
暂无评论
笔记 20240611_Elastic Search_Geek_d01095_InfoQ写作社区