Authorization: Bearer ********************
{
"size": 0,
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"term": {
"userSn.keyword": "AjIBoWAxNH5YkGQbyrz9VP0qfgLnk73B0SMhvNztWXQ"
}
},
{
"range": {
"createdAt.keyword": {
"gte": "2023-11-20 00:00:00",
"lte": "2023-12-31 00:00:00"
}
}
}
]
}
},
"aggs": {
"genderAgg": {
"terms": {
// "script": "if (doc.containsKey('idCard.keyword') && doc['idCard.keyword'].size() > 0) { def idCard = doc['idCard.keyword'].value;def matcher = /(\\d)(\\d|X|x)$/.matcher(idCard);return matcher.find() ? (Integer.parseInt(matcher.group(1)) % 2 == 0 ? 'female' : 'male') : 'unknown'; } else { return 'unknown'; }",
"script": "if (doc.containsKey('idCard.keyword') && doc['idCard.keyword'].size() > 0) { def idCard = doc['idCard.keyword'].value; def matcher = /\\d{6}(\\d{4})(\\d{2})(\\d{2})\\d{3}[0-9Xx]/.matcher(idCard); if (matcher.find()) { def birthDate = ZonedDateTime.of(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)), Integer.parseInt(matcher.group(3)), 0, 0, 0, 0, ZoneId.systemDefault()).toInstant(); def currentDate = Instant.ofEpochMilli(params['now']); def age = ChronoUnit.YEARS.between(birthDate, currentDate); if (age >= 18 && age <= 23) { return '18~23'; } else if (age >= 24 && age <= 30) { return '24~30'; } else if (age >= 31 && age <= 40) { return '31~40'; } else if (age >= 41 && age <= 49) { return '41~49'; } else if (age >= 50) { return '50以上'; } else { return '未知年龄段: ' + age; } } else { return '未知年龄段: 未找到匹配的生日'; } } else { return '未知年龄段: 未找到身份证信息'; }",
"size": 3
}
}
}
}
curl --location --request POST 'http://192.168.1.106:19200/es_order_sink_test/_search' \
--header 'Content-Type: application/json' \
--data-raw '{
"size": 0,
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"term": {
"userSn.keyword": "AjIBoWAxNH5YkGQbyrz9VP0qfgLnk73B0SMhvNztWXQ"
}
},
{
"range": {
"createdAt.keyword": {
"gte": "2023-11-20 00:00:00",
"lte": "2023-12-31 00:00:00"
}
}
}
]
}
},
"aggs": {
"genderAgg": {
"terms": {
// "script": "if (doc.containsKey('\''idCard.keyword'\'') && doc['\''idCard.keyword'\''].size() > 0) { def idCard = doc['\''idCard.keyword'\''].value;def matcher = /(\\d)(\\d|X|x)$/.matcher(idCard);return matcher.find() ? (Integer.parseInt(matcher.group(1)) % 2 == 0 ? '\''female'\'' : '\''male'\'') : '\''unknown'\''; } else { return '\''unknown'\''; }",
"script": "if (doc.containsKey('\''idCard.keyword'\'') && doc['\''idCard.keyword'\''].size() > 0) { def idCard = doc['\''idCard.keyword'\''].value; def matcher = /\\d{6}(\\d{4})(\\d{2})(\\d{2})\\d{3}[0-9Xx]/.matcher(idCard); if (matcher.find()) { def birthDate = ZonedDateTime.of(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)), Integer.parseInt(matcher.group(3)), 0, 0, 0, 0, ZoneId.systemDefault()).toInstant(); def currentDate = Instant.ofEpochMilli(params['\''now'\'']); def age = ChronoUnit.YEARS.between(birthDate, currentDate); if (age >= 18 && age <= 23) { return '\''18~23'\''; } else if (age >= 24 && age <= 30) { return '\''24~30'\''; } else if (age >= 31 && age <= 40) { return '\''31~40'\''; } else if (age >= 41 && age <= 49) { return '\''41~49'\''; } else if (age >= 50) { return '\''50以上'\''; } else { return '\''未知年龄段: '\'' + age; } } else { return '\''未知年龄段: 未找到匹配的生日'\''; } } else { return '\''未知年龄段: 未找到身份证信息'\''; }",
"size": 3
}
}
}
}'
{}