package com.applesnt.onlinemall.search;
import com.alibaba.fastjson.JSON;
import com.applesnt.onlinemall.search.config.ElasticSearchConfig;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.lucene.search.TotalHits;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.Avg;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class OnlinemallSearchApplicationTests {
@Autowired
private RestHighLevelClient client;
@Data
@ToString
static public class BankVo{
private int account_number;
private int balance;
private String firstname;
private String lastname;
private int age;
private String gender;
private String address;
private String employer;
private String email;
private String city;
private String state;
}
@Test
public void searchData() throws IOException {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("bank");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
sourceBuilder.aggregation(AggregationBuilders.terms("ageagg").field("age").size(10));
sourceBuilder.aggregation(AggregationBuilders.avg("balanceavg").field("balance"));
System.out.println("查询条件:"+sourceBuilder.toString());
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);
System.out.println("响应数据"+searchResponse.toString());
SearchHits hits = searchResponse.getHits();
TotalHits totalHits = hits.getTotalHits();
System.out.println("总记录数为:"+totalHits.value);
SearchHit[] docHits = hits.getHits();
for (SearchHit docHit : docHits) {
String id = docHit.getId();
System.out.println("id = "+id);
String sourceAsString = docHit.getSourceAsString();
BankVo bankVo = JSON.parseObject(sourceAsString, BankVo.class);
System.out.println("文档数据:"+bankVo.toString());
}
Aggregations aggregations = searchResponse.getAggregations();
Terms ageagg1 = aggregations.get("ageagg");
List<? extends Terms.Bucket> buckets = ageagg1.getBuckets();
for (Terms.Bucket bucket : buckets) {
System.out.println("年龄:"+bucket.getKeyAsString());
System.out.println("数量:"+bucket.getDocCount());
}
Avg balanceavg = aggregations.get("balanceavg");
System.out.println("平均薪资为:"+balanceavg.getValueAsString());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用