1.SpringBoot环境和测试类,我就不讲了。

2.yml中的配置

clustername:是es的集群名称,默认是elasticsearch

cluster-nodes:tcp的地址,不要写错。

spring:data:elasticsearch:cluster-name: elasticsearchcluster-nodes: 192.168.199.128:9300

3.注意:org.springframework.boot,的版本如果过高或者过低,都会和我的代码不一样,我的是2.0.6

4.实体类的创建,用于创建es索引库和mapping映射段

/*indexName:索引库名,shards分片,replicas:副本,type表名
* - `@Field` 作用在成员变量,标记为文档的字段,并指定字段映射属性:- type:字段类型,取值是枚举:FieldType- index:是否索引,布尔类型,默认是true- store:是否存储,布尔类型,默认是false- analyzer:分词器名称:ik_max_word*/
@Document(indexName = "item", shards = 1,replicas =0 , type="docs")
public class Item {@IdLong id;@Field(type =FieldType.Text,analyzer = "ik_max_word")String title; //标题@Field(type = FieldType.Keyword)String category;// 分类@Field(type =FieldType.Keyword )String brand; // 品牌@Field(type =FieldType.Double )Double price; // 价格@Field(type =FieldType.Keyword ,index = false)String images; // 图片地址@Overridepublic String toString() {return "Item{" +"id=" + id +", title='" + title + '\'' +", category='" + category + '\'' +", brand='" + brand + '\'' +", price=" + price +", images='" + images + '\'' +'}';}public Item() {}public Item(Long id, String title, String category, String brand, Double price, String images) {this.id = id;this.title = title;this.category = category;this.brand = brand;this.price = price;this.images = images;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public String getImages() {return images;}public void setImages(String images) {this.images = images;}
}

5.写一个结构,继承ElasticSearchRepository<实体类,主键类型>

6.测试代码

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringDataEsApplication.class)
public class elasticSearch {@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@Autowiredprivate ItemRepository itemRepository;@Testpublic void textIndex(){elasticsearchTemplate.createIndex(Item.class);elasticsearchTemplate.putMapping(Item.class);}@Testpublic void testSave(){Item item=new Item(1L, "小米手机7", " 手机","小米", 3499.00, "http://image.leyou.com/13123.jpg");itemRepository.save(item);}@Testpublic void testSaveAll(){List<Item> list=new ArrayList<>();list.add(new Item(1L, "小米手机7", "手机", "小米", 3299.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(2L, "坚果手机R1", "手机", "锤子", 3699.00, "http://image.leyou.com/123.jpg"));list.add(new Item(3L, "华为META10", "手机", "华为", 4499.00, "http://image.leyou.com/3.jpg"));list.add(new Item(4L, "小米Mix2S", "手机", "小米", 4299.00, "http://image.leyou.com/13123.jpg"));list.add(new Item(5L, "荣耀V10", "手机", "华为", 2799.00, "http://image.leyou.com/13123.jpg"));itemRepository.saveAll(list);}@Testpublic void testFindById(){Optional<Item> item = itemRepository.findById(1l);System.out.println(item.get());}@Testpublic void testSortFind(){Iterable<Item> price = itemRepository.findAll(Sort.by("price").descending());price.forEach((item)-> System.out.println(item));
//        或者price.forEach(System.out::println);}@Testpublic void testFindByTitle(){List<Item> shoujis = itemRepository.findByTitle("手机");shoujis.forEach((shouji)-> System.out.println(shouji));}@Testpublic void testFindPriceBetween(){List<Item> byPriceBetween = itemRepository.findByPriceBetween(3600d, 5000d);byPriceBetween.forEach(System.out::println);}@Testpublic void testFindByCategory(){List<Item> shoujis = itemRepository.findByCategory("手机");shoujis.forEach((shouji)-> System.out.println(shouji));}@Testpublic void testFindAll(){Iterable<Item> all = itemRepository.findAll();all.forEach(System.out::println);}/*高级查询*/@Testpublic void testQueryBuilders(){MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "手机");Iterable<Item> search = itemRepository.search(matchQueryBuilder);search.forEach(System.out::println);}/*自定义构建器查询*/@Testpublic void testNativeSearchQueryBuilder(){NativeSearchQueryBuilder searchQueryBuilder=new NativeSearchQueryBuilder();//添加基本查询条件searchQueryBuilder.withQuery(QueryBuilders.matchQuery("title", "手机"));//执行查询,获取分页结果集Page<Item> items = itemRepository.search(searchQueryBuilder.build());//默认添加分页System.out.println(items.getTotalElements());System.out.println(items.getTotalPages());items.forEach(System.out::println);}/*分页查询*/@Testpublic void testPage(){NativeSearchQueryBuilder QueryBuilder=new NativeSearchQueryBuilder();//添加基本查询条件QueryBuilder.withQuery(QueryBuilders.matchQuery("category","手机"));//添加分页条件,页码从0开始,查询第二页每页两条QueryBuilder.withPageable(PageRequest.of(1,2));//执行查询,获取分页结果集Page<Item> search = this.itemRepository.search(QueryBuilder.build());System.out.println(search.getTotalPages());System.out.println(search.getTotalElements());search.getContent().forEach(System.out::println);}/*排序查询*/@Testpublic void testSort(){NativeSearchQueryBuilder QueryBuilder=new NativeSearchQueryBuilder();//添加基本查询条件QueryBuilder.withQuery(QueryBuilders.matchQuery("category","手机"));//添加排序QueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.ASC));//执行查询,获取分页结果集Page<Item> search = this.itemRepository.search(QueryBuilder.build());System.out.println(search.getTotalPages());System.out.println(search.getTotalElements());search.getContent().forEach(System.out::println);}/*聚合查询*/@Testpublic void testAgg(){NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();//定义聚合名称和聚合字段searchQueryBuilder.addAggregation(AggregationBuilders.terms("brandAgg").field("brand"));//过滤掉普通结果集,不包含任何字段,也不排除任何字段,等于不显示普通字段。searchQueryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{},null));//执行查询,要使用page中的AggregationPage字类,才能拿到aggregation聚合AggregatedPage<Item> search = (AggregatedPage<Item>)itemRepository.search(searchQueryBuilder.build());//想要在聚合中拿到桶,就需要使用其下的Terms-StringTerms字类,根据我们的聚合方式,使用的子类也不同StringTerms brandAgg = (StringTerms)search.getAggregation("brandAgg");List<StringTerms.Bucket> buckets = brandAgg.getBuckets();buckets.forEach((bucket)->{//打印聚合名称和词条数System.out.println(bucket.getKeyAsString());System.out.println(bucket.getDocCount());});}//桶内嵌套度量@Testpublic void testAggAndDuliang(){NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();//定义聚合名称和聚合字段searchQueryBuilder.addAggregation(AggregationBuilders.terms("brandAgg").field("brand").subAggregation(AggregationBuilders.avg("price_avg").field("price")));//过滤掉普通结果集,不包含任何字段,也不排除任何字段,等于不显示普通字段。searchQueryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{},null));//执行查询,要使用page中的AggregationPage字类,才能拿到aggregation聚合AggregatedPage<Item> search = (AggregatedPage<Item>)itemRepository.search(searchQueryBuilder.build());//想要在聚合中拿到桶,就需要使用其下的Terms-StringTerms字类,根据我们的聚合方式,使用的子类也不同StringTerms brandAgg = (StringTerms)search.getAggregation("brandAgg");List<StringTerms.Bucket> buckets = brandAgg.getBuckets();buckets.forEach((bucket)->{//打印聚合名称和词条数System.out.println(bucket.getKeyAsString());System.out.println(bucket.getDocCount());//子聚合放入map中根据,map的key-子聚合名称获取聚合Map<String, Aggregation> stringAggregationMap = bucket.getAggregations().asMap();//依旧需要强转,avg需要转成InternalAvgInternalAvg price_avg = (InternalAvg)stringAggregationMap.get("price_avg");System.out.println(price_avg.getValue());});}
}

7.最后附上依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.itcast.elasticSearch</groupId><artifactId>SpringDate-ElasticSearch</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

SpringBoot整合ElasticSearch测试代码相关推荐

  1. SpringBoot整合RabbitMQ测试代码

    RabbitMQ有以下几种工作模式 : 1.Work queues  工作队列 2.Publish/Subscribe 发布订阅 3.Routing      路由 4.Topics        通 ...

  2. SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)

    准备工作# 环境准备# JAVA版本 Copy java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1. ...

  3. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  4. SpringBoot 整合ElasticSearch全文检索

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java语言开发的,并作为Apa ...

  5. 【十九】springboot整合ElasticSearch实战(万字篇)

    本章开始学习springboot整合ElasticSearch 7.X版本并通过小demo实现基本的增删改查.实现如下案例: 1.当向数据新增一个商品信息时,同时向rabbitMQ发起消息(异步实现) ...

  6. 微服务商城系统(六)商品搜索 SpringBoot 整合 Elasticsearch

    文章目录 一.Elasticsearch 和 IK 分词器的安装 二.Kibana 使用 三.数据导入 Elasticsearch 1.SpringData Elasticsearch 介绍 2.搜索 ...

  7. java-web系列(九)---SpringBoot整合ElasticSearch

    前言 这个项目的github地址:extensible项目的github地址 extensible项目当前功能模块如下: java-web系列(一)-搭建一个基于SSM框架的java-web项目 ja ...

  8. es springboot 不设置id_原创 | 一篇解决Springboot 整合 Elasticsearch

    ElasticSearch 结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务. ElasticSearch是一个基于Lucene的 ...

  9. Springboot整合Elasticsearch(High-level-Client)

    前言 通过学习Elasticsearch一小段时间来稍微认识了一点ES的体系架构.发现ES最大的坑就是版本兼容性问题了-在整合Springboot也不例外,但是,有一种方式能较好的解决-通过restc ...

最新文章

  1. javascript开关_JavaScript开关案例简介
  2. nagios学习手札
  3. Tomcat 7最大并发连接数的正确修改方法(转)
  4. 除了 k8s,留给 k 和 s 中间的数字不多了!
  5. CodeForces - 1303E Erase Subsequences(dp)
  6. Github无法拉代码
  7. Statement对象最新解析
  8. 力扣-872 叶子相似的树
  9. 书籍-微服务架构与实践
  10. 【学习笔记】从eXeScope到汇编与反汇编、加壳与脱壳的理解
  11. java计算器模拟程序_模拟计算器java程序
  12. 【Unity】雷达+Unity +TUIO 介绍二
  13. 许可协议html,许可协议
  14. 实践对比google和bing搜索哪个更优
  15. 头歌 初识MongoDB
  16. CISP——密码学基本概念(术语)
  17. 支付宝架构有多牛?还没看完我就跪了...
  18. 鞍部在哪里_富春江,富春江在哪里_富春江在哪个省_属于哪个省_就去旅游网
  19. 索引生命周期管理ILM看完不懂你锤我
  20. 为Fragment设置转场动画

热门文章

  1. Matlab数据分析与计算,互联网java工程师面试题pdf
  2. java 反射练习_JAVA反射的基础学习
  3. Delphi反射传入var形式的参数
  4. 如何在外网上中山大学的校园网
  5. 计算机系统设置图标异常,桌面图标大小出现异常win7如何更改电脑桌面的分辨率...
  6. PHP闭包函数与闭包函数回调
  7. android 控件布局(顶部、底部......) 留着自己用
  8. 酷比魔方iWork8,Win8平板,¥599
  9. strtok函数与函数用法实例
  10. 【EasyExcel 教程】详解填充Excel -- 填充