准备环境

1 安装Elasticsearch 5.5.2 (略)

2 使用爬虫爬取厦门人才网相关招聘信息(略)

通过elasticsearch-head插件可以看到我们已经爬取很多数据了

3 在项目中整合spring-data-elasticsearch

①引入依赖

         <!--集成elasticSearch--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>3.1.1.RELEASE</version></dependency>

② 在.yml文件中配置elasticsearch 主机信息

使用spring data elasticsearch 接口

查找公司在软件园二期,职位为Java开发的公司,并按平均工资从高到低排序 ,返回前100条记录

sql:  select company,avg(lowSalary) as avg_salary group by company order by avg_salary

*** 描述:* 招聘信息检** @author Administrator* @create 2018-10-26 17:45*/
@RestController
@RequestMapping("/search")
public class JobController {@Autowiredprivate JobRepository jobRepository;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@PostMapping("/salary")public ResponseEntity searchSalary(@RequestBody  List<QueryFilter> queryFilterList){BoolQueryBuilder qb = QueryBuilders.boolQuery();queryFilterList.forEach(queryFilter -> {if (queryFilter.isMust()) {qb.must(QueryBuilders.matchPhraseQuery(queryFilter.getName(),queryFilter.getValue()));} else {qb.should(QueryBuilders.matchPhraseQuery(queryFilter.getName(),queryFilter.getValue()));}});FieldSortBuilder salary = SortBuilders.fieldSort("lowSalary").order(SortOrder.DESC);TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("company_count").order(Terms.Order.aggregation("avg_salary",false)).field("company.keyword").size(100);AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_salary").field("lowSalary");SearchRequestBuilder requestBuilder = elasticsearchTemplate.getClient().prepareSearch("zhipin").setTypes("job");requestBuilder.addAggregation(termsAggregationBuilder.subAggregation(avgAggregationBuilder));requestBuilder.setQuery(qb).addSort(salary);SearchResponse response = requestBuilder.execute().actionGet();Terms company_count = response.getAggregations().get("company_count");for(Terms.Bucket entry:company_count.getBuckets()){String key = entry.getKeyAsString();long docCount = entry.getDocCount();double avg_salary = ((InternalAvg) entry.getAggregations().get("avg_salary")).getValue();System.out.println("key ["+key+"],doc_count ["+docCount+"],avg_salary :"+avg_salary);}return new ResponseEntity(1, HttpStatus.OK);}
}

查询结果如下:

查找公司在软件园二期,职位为Java开发的公司,并按平均工资从高到低 ,返回前20条记录(附带职位具体信息(按公司的招聘薪资倒序))

@RestController
@RequestMapping("/search")
public class JobController {@Autowiredprivate JobRepository jobRepository;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@PostMapping("/salary")public ResponseEntity searchSalary(@RequestBody  List<QueryFilter> queryFilterList) throws InvocationTargetException, IllegalAccessException {BoolQueryBuilder qb = QueryBuilders.boolQuery();queryFilterList.forEach(queryFilter -> {if (queryFilter.isMust()) {qb.must(QueryBuilders.matchPhraseQuery(queryFilter.getName(),queryFilter.getValue()));} else {qb.should(QueryBuilders.matchPhraseQuery(queryFilter.getName(),queryFilter.getValue()));}});FieldSortBuilder salary = SortBuilders.fieldSort("lowSalary").order(SortOrder.DESC);TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("companyName").order(Terms.Order.aggregation("avg_salary",false)).field("company.keyword").size(20);AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_salary").field("lowSalary");TopHitsAggregationBuilder top = AggregationBuilders.topHits("top").sort(salary).size(1).sort(salary);SearchRequestBuilder requestBuilder = elasticsearchTemplate.getClient().prepareSearch("zhipin").setTypes("job");requestBuilder.addAggregation(termsAggregationBuilder.subAggregation(top).subAggregation(avgAggregationBuilder));requestBuilder.setQuery(qb);SearchResponse response = requestBuilder.execute().actionGet();List<Job> jobList=new ArrayList<>();Terms companyName = response.getAggregations().get("companyName");for(Terms.Bucket entry:companyName.getBuckets()){String key = entry.getKeyAsString();long docCount = entry.getDocCount();TopHits topHits = entry.getAggregations().get("top");double avg_salary = ((InternalAvg) entry.getAggregations().get("avg_salary")).getValue();for (SearchHit hit:topHits.getHits().getHits()){System.out.println("key ["+key+"],doc_count ["+docCount+"],avg_salary :"+avg_salary+"document:"+hit.getSource());Job job=new Job();org.apache.commons.beanutils.BeanUtils.populate(job,hit.getSource());jobList.add(job);}}return new ResponseEntity(jobList, HttpStatus.OK);}
}

查询结果如下

使用图形可视化报表

Spring Data Elasticsearch聚合搜索实战相关推荐

  1. 【Spring Data ElasticSearch】高级查询,聚合

    [Spring Data ElasticSearch]高级查询,聚合 1. 高级查询 1.1 基本查询 1.2 自定义查询 1.3 分页查询 1.4 排序 2. 聚合 2.1 聚合为桶 2.2 嵌套聚 ...

  2. Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建

    一:前语 1.项目文档 CSDN 专栏:<Elasticsearch 入门和项目实战> 博客路径: https://blog.csdn.net/a767815662/category_91 ...

  3. Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch

    什么是全文检索 数据分类 生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结 ...

  4. SpringBoot整合Spring Data Elasticsearch

    特点: 分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心) Restful风格,一切API都遵循Rest原则,容易上手 近实时搜索,数据更新在Elasticsear ...

  5. 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)

    文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...

  6. Spring Data Elasticsearch案例详解

    一.Elasticsearch 工作原理 1.1 文档存储的路由 当索引到一个文档(如:报价系统),具体的文档数据(如:报价数据)会存储到一个分片.具体文档数据会被切分,并分别存储在分片 1 或者 分 ...

  7. Spring和Elasticsearch全文搜索整合详解

    Spring和Elasticsearch全文搜索整合详解 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web ...

  8. SpringBoot207 - 集成 spring data elasticsearch

    扯淡: Spring Data Elasticsearch 是spring data对elasticsearch进行的封装.所以在springboot项目中使用es非常方便,直接在 dao 接口继承 ...

  9. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十四(Spring Data Elasticsearch,将数据添加到索引库)

    Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十四(Spring Data Elasticsearch,将数据添加到索引库) 一.创建El ...

最新文章

  1. 代码实战 | 用LeGO-LOAM实现地面提取
  2. ArduinoYun的电源插座
  3. tf.where() 详解
  4. python gridfs_python 将图片存入mongodb,读取图片,gridfs模块
  5. qt 中如何检测是否按下键盘(很实用)
  6. 从零开始编写自己的C#框架(1)——前言
  7. 高效实用的.NET开源项目
  8. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等...
  9. Visual Studio2010安装步骤
  10. R语言风玫瑰图绘制(附代码)
  11. PowerDesigner16.5下载和安装教程
  12. 吉林大学操作系统上机(实验二:处理机调度——实时调度算法EDF和RMS)
  13. emoji表情 mysql转移,mysql中emoji表情存储
  14. easyExcel 导出自动添加序号
  15. 移动端border-radius绘制圆点不圆
  16. C语言 打飞机 小游戏
  17. vue使用高德地图实现实时天气预报功能
  18. 关于swiper在移动端,快速上下滑动出现白边的解决办法
  19. Pytorch学习(二)—— nn模块
  20. android的照片恢复,安卓手机删除的照片如何恢复呢

热门文章

  1. VUE+SpringBoot+Websocket实现前后端通信案例分享
  2. 不提前发表职称论文和专利是职称评审被淘汰的主要原因吗?
  3. 暑假集训#2 div1 J 四点直角 J - Space Invader 四点共面+跨立实验
  4. 【水果识别】苹果质量检测及分级系统【含GUI Matlab源码 519期】
  5. 松鼠聚合直播3.0加密key,聚合直播3.0采用了加密机制,直接打包无法播放都解决问题,有以下地方必须配对才可以正常通信
  6. 编译原理|第7章|布尔表达式的翻译
  7. 外汇黄金交易平台排行榜2019
  8. 【Oracle问题】Oracle12c安装问题:INS-30014
  9. 2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest B. Bakery
  10. 关于机器人方面的sci论文_与机器人紧密相关的SCI期刊