Elasticsearch使用java API 查询时间范围内匹配某个关键字并对查询结果内按某个字段进行GroupBy操作

本文介绍如何使用Elasticsearch的Java API实现基于时间范围内的关键字查询,并通过GroupBy操作统计特定字段的数量。示例代码展示了如何设置查询条件、执行搜索及获取结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Elasticsearch使用java API 查询时间范围内匹配某个关键字并对查询结果内按某个字段进行GroupBy操作,我们业务需求是求某个手机前缀在某个时间范围内每个imsi对应的总数

代码如下:

	public void searchByPrefix(List<String> prefixList , String fromTime , String endTime){
		for (String prefix : prefixList) {
			QueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("time").from(fromTime).to(endTime))
					.must(QueryBuilders.wildcardQuery("phone_prefix", prefix));
					//.must(QueryBuilders.matchQuery("phone_prefix", prefix));
			TermsAggregationBuilder builder = AggregationBuilders.terms("count_imsi").field("imsi");
			// ResIndex resIndex =
			// super.selectByPrimaryKey(deviceCountReqVo.getIndexId());
			SearchResponse searchResponse = transportClient.prepareSearch("ori_epotential_res_*").setTypes("ori_epotential_res").setQuery(query).addAggregation(builder)
					.setFrom(0).setSize(5)// 分页
					.get();
			System.out.println(searchResponse.toString());
		}
	}

代码中的:

.must(QueryBuilders.wildcardQuery("phone_prefix", prefix));
.must(QueryBuilders.matchQuery("phone_prefix", prefix));

分别是通配符模糊查询和精确字段匹配。

个人小站点:四川耍耍网 重庆耍耍网 成都耍耍网 川渝耍耍网 四川论坛 重庆论坛 www.cysua.com

可以使用 ElasticsearchJava API查询某个时间区间内创建的索引,具体步骤如下: 1. 首先,你需要创建一个 `RestHighLevelClient` 实例,该实例可以连接 Elasticsearch 服务器。 ``` RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); ``` 2. 然后,你需要构建一个查询请求,该请求包含一个时间区间过滤器。 ``` SearchRequest searchRequest = new SearchRequest("索引名称"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("创建时间字段") .gte("开始时间") .lte("结束时间"); searchSourceBuilder.query(rangeQueryBuilder); searchRequest.source(searchSourceBuilder); ``` 其中,`索引名称` 是你要查询的索引名称,`创建时间字段` 是你的索引中表示创建时间字段名称,`开始时间` 和 `结束时间` 是你要查询时间区间。 3. 最后,你可以使用 `client.search(searchRequest, RequestOptions.DEFAULT)` 方法执行查询请求,处理查询结果。 完整的代码示例: ``` RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); SearchRequest searchRequest = new SearchRequest("索引名称"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("创建时间字段") .gte("开始时间") .lte("结束时间"); searchSourceBuilder.query(rangeQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits) { String index = hit.getIndex(); String id = hit.getId(); Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 处理查询结果 } client.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值