java在es中简单获取数据

6 篇文章 1 订阅

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{}	//方法传入的条件实体类
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值