ES检索条件:
其他条件
AND
((字段A >=2023-01-01 AND 字段A<=2023-12-31)
OR
(字段B>=2023-01-01 AND 字段B <=2023-12-31))
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@Service
public class YourSearchService {
private final RestHighLevelClient elasticsearchClient;
@Autowired
public YourSearchService(RestHighLevelClient elasticsearchClient) {
this.elasticsearchClient = elasticsearchClient;
}
public SearchResponse searchWithMultipleConditions() throws IOException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse("2023-01-01", formatter);
LocalDate endDate = LocalDate.parse("2023-12-31", formatter);
// 构建多字段查询条件
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.rangeQuery("字段A").gte(startDate).lte(endDate))
.should(QueryBuilders.rangeQuery("字段B").gte(startDate).lte(endDate));
// 构建查询请求
SearchRequest searchRequest = new SearchRequest("your_index_name");
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));
// 执行查询并返回结果
return elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);
}
}