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{} //方法傳入的條件實體類