public SearchResponse<Object> buildAndExecuteSearchRequest(String index, String lastUpdateTime) throws IOException {
// 第一个 should 条件:name字段不存在
Query mustNotResumeExistsQuery = new Query.Builder()
.bool(new BoolQuery.Builder()
.mustNot(new Query.Builder()
.exists(new ExistsQuery.Builder().field("name").build())
.build())
.build())
.build();
// 第二个 should 条件:name字段存在且 esUpdateTime 大于 lastUpdateTime
Query resumeExistsAndTimeRangeQuery = new Query.Builder()
.bool(new BoolQuery.Builder()
.must(new Query.Builder()
.exists(new ExistsQuery.Builder()
.field("name")
.build())
.build())
.must(new Query.Builder()
.range(RangeQuery.of(r -> r
.date(d -> d
.field("time")
.gte(lastUpdateTime)
))
)
.build())
.build())
.build();
// 构建布尔查询
Query finalQuery = new Query.Builder()
.bool(new BoolQuery.Builder()
.should(mustNotResumeExistsQuery)
.should(resumeExistsAndTimeRangeQuery)
.build())
.build();
// 构建搜索请求
SearchRequest searchRequest = new SearchRequest.Builder()
.index(index)
.query(finalQuery)
.size(BATCH_SIZE)
.build();
log.info("Search request: {}", searchRequest);
return esClient.search(searchRequest, Object.class);
}
03-04
984

10-20
1624
