可以使用Range Query和Date Math的组合来构建查询条件,具体步骤如下:

  1. 确定查询的时间范围,例如查询最近一个月内的数据,可以使用Java的Calendar类获取当前时间,并将当前时间减去一个月作为查询的结束时间:
Calendar calendar = Calendar.getInstance();
Date endDate = calendar.getTime(); // 当前时间
calendar.add(Calendar.MONTH, -1);
Date startDate = calendar.getTime(); // 一个月前的时间
  1. 构建Range Query,查询latestTs字段在指定时间范围内的数据:
QueryBuilder rangeQuery = QueryBuilders.rangeQuery("latestTs")
    .from(startDate)
    .to(endDate)
    .includeLower(true)
    .includeUpper(true);

其中,from和to指定了查询的起始和结束时间,includeLower和includeUpper指定了是否包含起始和结束时间点的数据。

  1. 将Range Query和其他查询条件组合成一个完整的查询:
QueryBuilder query = QueryBuilders.boolQuery()
    .must(rangeQuery)
    .must(QueryBuilders.termQuery("type", "xxx"))
    .mustNot(QueryBuilders.termQuery("status", "deleted"));

这里使用了Bool Query来组合查询条件,可以根据实际需求添加更多的must、must_not和should子句。

  1. 执行查询并处理查询结果:
SearchResponse response = client.prepareSearch("index_name")
    .setQuery(query)
    .setSize(10)
    .execute()
    .actionGet();

SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
    // 处理查询结果
}

这里使用了Elasticsearch的Java API来执行查询,并使用SearchHits类来处理查询结果。可以根据实际需求调整查询的结果数量和其他参数

java构建es查询条件根据latestTs字段查询一个月内的任意时间段数据

原文地址: https://www.cveoy.top/t/topic/fHHm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录