写一个关于es查询的java 要求是需要使用多条件必需同时满足的 还有要在里面加上查询一个范围的时间
时间: 2024-03-10 19:49:23 浏览: 20
以下是一个使用多条件查询并且查询一个时间范围的 Java 代码示例:
```java
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class ESQueryExample {
public static void main(String[] args) throws IOException {
// 创建一个 RestHighLevelClient 对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
// 创建一个 SearchRequest 对象
SearchRequest searchRequest = new SearchRequest("my-index");
// 创建一个 SearchSourceBuilder 对象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 创建一个 BoolQueryBuilder 对象
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 添加多条件查询
boolQueryBuilder.must(QueryBuilders.termQuery("field1", "value1"));
boolQueryBuilder.must(QueryBuilders.termQuery("field2", "value2"));
// 创建一个 RangeQueryBuilder 对象
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("timestamp");
// 设置时间范围
rangeQueryBuilder.gte("2022-01-01T00:00:00Z");
rangeQueryBuilder.lte("2022-01-31T23:59:59Z");
// 添加时间范围查询
boolQueryBuilder.filter(rangeQueryBuilder);
// 将 BoolQueryBuilder 对象添加到 SearchSourceBuilder 对象中
searchSourceBuilder.query(boolQueryBuilder);
// 设置超时时间
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
// 将 SearchSourceBuilder 对象添加到 SearchRequest 对象中
searchRequest.source(searchSourceBuilder);
// 执行搜索请求
SearchResponse searchResponse = client.search(searchRequest);
// 处理搜索结果
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsString());
}
// 关闭 RestHighLevelClient 客户端
client.close();
}
}
```
以上代码中,我们使用了 Elasticsearch 的 Java 高级 REST 客户端库。首先,我们创建了一个 `RestHighLevelClient` 对象,然后创建了一个 `SearchRequest` 对象,并指定了要查询的索引名称。接下来,创建了一个 `SearchSourceBuilder` 对象,用于构建查询请求。然后,我们创建了一个 `BoolQueryBuilder` 对象,并添加了多个条件查询。最后,我们创建了一个 `RangeQueryBuilder` 对象,并设置了时间范围。将 `RangeQueryBuilder` 对象添加到 `BoolQueryBuilder` 中,并将 `BoolQueryBuilder` 对象添加到 `SearchSourceBuilder` 中。最后,我们执行搜索请求,获取搜索结果,并遍历结果集中的每个文档。