java在es中簡單獲取數據

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{}	//方法傳入的條件實體類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章