es版本
<!--Es连接-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.1.1</version>
</dependency>
public List<T> getEsData(T2 t2){
RestHighLevelClient client = EsClient.getConnection(); //获取连接对象, 其方法一般在工具类中
List<T> resultList = new LinkedList>(); //返回的结果list
QueryBuilder qBuilder = geBuilder(t2); //获取查询的条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder() //创建 查询 对象
.size(5000) //返结果size
.sort(new FieldSortBuilder("timestamp") //排序
.order(SortOrder.DESC)); //正序
SearchRequest rq = new SearchRequest("esIndex") //请求 索引库
.source(sourceBuilder); //组装查询条件
try {
SearchResponse rp = client.search(rq, RequestOptions.DEFAULT); // 查询 ,返回结果
for (SearchHit hit : rp.getHits()) { //迭代 结果集
JSONObject jsonObject = JSON.parseObject(hit.toString());
String r = jsonObject.getString("_source");
T t = JSON.parseObject(r, T.class); // 把结果封装成对象
showData.setTimestamp("*******"); //需要把时间加8个小时
resultList.add(t);
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
closeClient(client); //关闭连接
} catch (Exception e) {
e.printStackTrace();
}
}
return resultList;
}
//获取查询条件方法
public QueryBuilder geBuilder(T2 t2){
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
//时间区间选择 0时区的时间
if(!t2.getStartDate().isEmpty()&&!t2.getEndDate().isEmpty()){
queryBuilder.must(QueryBuilders.rangeQuery("timestamp").from(t2.getStartDate()).to(t2.getEndDate()));
}
//模糊查询 包含该字符串
if(!t2.getWord().isEmpty()){
queryBuilder.must(QueryBuilders.wildcardQuery("name", "*"+t2.getWord()+"*"));
}
// 全词匹配 包含该字符串
if(!t2.getLevel().isEmpty()){
queryBuilder.must(QueryBuilders.matchPhraseQuery("lever", t2.getLevel()));
}
//分词匹配 包含该字符串的一部分即可
if(!t2.getLevel2().isEmpty()){
queryBuilder.must(QueryBuilders.matchQuery("lever2", t2.getLevel2()));
}
//范围区间 分数在60-70 或 90-100 分
if(!t2.getScores.isEmpty()){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.rangeQuery("score").gt(90).lte(100));
boolQueryBuilder.should(QueryBuilders.rangeQuery("score").gt(60).lte(70));
queryBuilder.must(boolQueryBuilder);
}
// 等等等等 其他条件
return queryBuilder;
}
//实体类
public class T{} //方法返回的实体类,其属性尽量与es索引库的字段名相同
public class T2{} //方法传入的条件实体类