有的网站打不开是什么原因呢,岱山县建设网站,国内惯性导航,公司网站策划方案#x1f339; 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇#xff0c;如有问题请指教写。#x1f339;#x1f339; 如你对技术也感兴趣#xff0c;欢迎交流。#x1f339;#x1f339;#x1f339; 如有需要#xff0c;请#x1f44d;点赞#x1f… 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇如有问题请指教写。 如你对技术也感兴趣欢迎交流。 如有需要请点赞收藏分享 Spring Data Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷并支持 map-reduce 框架和云计算数据服务。 Spring Data 可以极大的简化JPA (Elasticsearch.·.)的写法在几乎不用写实现的情况下实现对数据的访问和操作。除了 CRUD 外还包括如分页、排序等功能
Spring DataLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-data
POM dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-elasticsearch/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactId/dependency
项目结构 配置
Data
Configuration
ConfigurationProperties(prefix elasticsearch)
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {private String host;private Integer port;Overridepublic RestHighLevelClient elasticsearchClient() {String scheme http;return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, scheme)));}
}实体
Data
NoArgsConstructor
AllArgsConstructor
ToString
Document(indexName product, shards 3, replicas 1)
public class Product {/*** 商品唯一标识*/Idprivate Long id;/*** 商品名称*/Field(type FieldType.Text)private String title;/*** 分类名称*/Field(type FieldType.Keyword)private String category;/*** 商品价格*/Field(type FieldType.Double)private Double price;/*** 图片地址*/Field(type FieldType.Keyword, index false)private String images;
} Dao 测试类
import com.mcp.es.entity.Product;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;SpringBootTest
RunWith(SpringRunner.class)
class EsSpringApplicationTests {Autowiredprivate ElasticsearchRestTemplate template;}创建索引 // 将根据实体类中的配置参数自动创建索引
Testvoid createIndex() {System.out.println(自动创建索引);} 索引操作
文档
RunWith(SpringRunner.class)
SpringBootTest
public class SpringDataEsRepositoryTest {Autowiredprivate ProductRepository repository;
} 基础操作 Testpublic void save(){Product product new Product();product.setId(1000L);product.setTitle(华为手机);product.setCategory(手机);product.setPrice(2999.0);product.setImages(http://www.atguigu/hw.jpg);repository.save(product);} //修改Testpublic void update(){Product product new Product();product.setId(1000L);product.setTitle(小米 2 手机);product.setCategory(手机);product.setPrice(9999.0);product.setImages(http://www.atguigu/xm.jpg);repository.save(product);} //根据 id 查询Testpublic void findById(){Product product repository.findById(1000L).get();System.out.println(product);} Testpublic void findAll(){IterableProduct products repository.findAll();for (Product product : products) {System.out.println(product);}} //删除Testpublic void delete(){Product product new Product();product.setId(1000L);repository.delete(product);} //批量新增Testpublic void saveAll(){ListProduct productList new ArrayList();for (int i 0; i 10; i) {Product product new Product();product.setId(Long.valueOf(i));product.setTitle([i]小米手机);product.setCategory(手机);product.setPrice(1999.0 i);product.setImages(http://www.atguigu/xm.jpg);productList.add(product);}repository.saveAll(productList);} //分页查询Testpublic void findByPageable(){//设置排序(排序方式正序还是倒序排序的 id)Sort sort Sort.by(Sort.Direction.DESC,id);int currentPage0;//当前页第一页从 0 开始 1 表示第二页int pageSize 5;//每页显示多少条//设置查询分页PageRequest pageRequest PageRequest.of(currentPage, pageSize,sort);//分页查询PageProduct productPage repository.findAll(pageRequest);for (Product Product : productPage.getContent()) {System.out.println(Product);}} 文档搜索 /*** term 查询* search(termQueryBuilder) 调用搜索方法参数查询构建器对象*/Testpublic void termQuery(){TermQueryBuilder termQueryBuilder QueryBuilders.termQuery(title, 小米);IterableProduct products repository.search(termQueryBuilder);for (Product product : products) {System.out.println(product);}}/*** term 查询加分页*/Testpublic void termQueryByPage(){int currentPage 0 ;int pageSize 5;//设置查询分页PageRequest pageRequest PageRequest.of(currentPage, pageSize);TermQueryBuilder termQueryBuilder QueryBuilders.termQuery(title, 小米);IterableProduct products repository.search(termQueryBuilder,pageRequest);for (Product product : products) {System.out.println(product);}}