diff --git a/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java b/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java index 130848b..94280a5 100644 --- a/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java +++ b/xiaoqu-agent-service/src/main/java/me/iiv/agent/es/ElectricityMessageEsGatewayImpl.java @@ -54,9 +54,11 @@ public class ElectricityMessageEsGatewayImpl implements ElectricityMessageEsGate if (messageType != null) { filters.addObject().putObject("term").putObject("messageType").put("value", messageType); } - // 老代码 rangeQuery from(start,true).to(end,true),闭区间 + // createTime 在索引里是 date 类型(format strict_date_optional_time||epoch_millis), + // 老系统经 DateUtils.parseDate 转 Date 后由 transport 序列化为 epoch 毫秒—— + // 直接把 yyyy-MM-dd HH:mm:ss 字符串发过去会被 400 拒绝(format 不接受空格分隔) ObjectNode range = filters.addObject().putObject("range").putObject("createTime"); - range.put("gte", startTime).put("lte", endTime); + range.put("gte", toEpochMillis(startTime)).put("lte", toEpochMillis(endTime)); ObjectNode body = mapper.createObjectNode(); body.put("from", from).put("size", size); @@ -86,9 +88,13 @@ public class ElectricityMessageEsGatewayImpl implements ElectricityMessageEsGate } } + private long toEpochMillis(String timeText) { + return TIME_FORMATTER.parse(timeText, Instant::from).toEpochMilli(); + } + /** - * createTime 在索引里可能是 yyyy-MM-dd HH:mm:ss 文本(老 range 直接传字符串可证 ES 接受该格式), - * 也可能是 epoch 毫秒数;两种形态都归一为 yyyy-MM-dd HH:mm:ss 文本输出。 + * createTime 在索引里是 date 类型,_source 里可能是 ISO 文本也可能是 epoch 毫秒数; + * 两种形态都归一为 Asia/Shanghai yyyy-MM-dd HH:mm:ss 文本输出。 */ private static String createTimeText(JsonNode value) { if (value == null || value.isNull()) { diff --git a/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java b/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java index 0aa2ea1..ec530a0 100644 --- a/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java +++ b/xiaoqu-agent-service/src/test/java/me/iiv/agent/es/ElectricityMessageEsGatewayImplTest.java @@ -98,10 +98,10 @@ class ElectricityMessageEsGatewayImplTest { // messageType 传了才加 term assertTrue(anyFilter(filters, f -> f.has("term") && f.get("term").get("messageType").get("value").asInt() == 0)); - // createTime 闭区间 range + // createTime 闭区间 range,date 类型字段必须发 epoch 毫秒(空格分隔字符串会被 ES 400 拒绝) assertTrue(anyFilter(filters, f -> f.has("range") - && f.get("range").get("createTime").get("gte").asText().equals("2026-09-21 00:00:00") - && f.get("range").get("createTime").get("lte").asText().equals("2026-09-21 23:59:59"))); + && f.get("range").get("createTime").get("gte").asLong() == 1789920000000L + && f.get("range").get("createTime").get("lte").asLong() == 1790006399000L)); } @Test