springboot集成ES,如何实现多字段条件查询

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);
    }
}