es 字符串时间格式的字符串怎么做小时查询
warning:
这篇文章距离上次修改已过247天,其中的内容可能已经有所变动。
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
// 创建一个脚本,用于解析时间字符串并检查小时是否等于指定的小时
Script script = new Script(
ScriptType.INLINE,
"painless",
"def formatter = DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss');\n" +
"def dateTime = LocalDateTime.parse(doc['eventTime'].value, formatter);\n" +
"if (dateTime == null) {\n" +
" logger.error('Failed to parse eventTime value: ' + doc['eventTime'].value);\n" +
"}\n" +
"return dateTime.getHour() == Integer.valueOf(params.hour);",
Collections.singletonMap("hour", "00") // 设置参数值为字符串类型的 "00"
);
// 创建一个脚本查询,匹配指定小时的数据
QueryBuilder scriptQuery = QueryBuilders.scriptQuery(script);
// 将脚本查询与其他条件组合
QueryBuilder finalQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("in_out_type", "1")) // 添加其他条件,例如匹配in_out_type为1的数据
.must(scriptQuery);
// 现在你可以使用finalQuery来执行你的Elasticsearch查询