最近在使用腾讯云CTSDB,发现查询数据时使用ElasticSearch原生Java API更方便一些.
具体操作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(QueryBuilders.termQuery("phone", terminalId)); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); // 判断时间范围. boolQueryBuilder.must( QueryBuilders.rangeQuery("createDateTime") .gte(LocalDateTime.of(2022, 9, 14, 19, 0, 0).format(dateTimeFormatter)) .lte(LocalDateTime.now().format(dateTimeFormatter))); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(boolQueryBuilder); searchSourceBuilder.size(100); searchSourceBuilder .docValueField("_id") .docValueField("phone") .docValueField("createDateTime") .docValueField("userName"); searchSourceBuilder.sort(SortBuilders.fieldSort("createDateTime").order(SortOrder.DESC)); SearchRequest searchRequest = new SearchRequest("user_info"); searchRequest.source(searchSourceBuilder); try { var searchResponse = ctsdbElasticsearchClient.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); log.info( objectMapper.writeValueAsString( Arrays.stream(searchHits).map(SearchHit::getFields).toList())); } catch (IOException e) { log.error("读取数据异常!"); } |