网站建设的模板,百度云如何做网站,制作流程图软件,手机网站建设的公司1.Spring Data 框架介绍 Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问#xff0c;并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷#xff0c;并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA 并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA Elasticsearch „的写法可以在几乎不用 写实现的情况下实现对数据的访问和操作。除了 CRUD 外还包括如分页、排序等一些 常用的功能。 Spring Data 的官网 https://spring.io/projects/spring-data Spring Data 常用的功能模块如下 2.Spring Data Elasticsearch 介绍 Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作将原始操作 Elasticsearch 的客户端 API 进行封装 。 Spring Data 为 Elasticsearch 项目提供集成搜索引擎。 Spring Data Elasticsearch POJO 的关键功能区域为中心的模型与 Elastichsearch 交互文档和轻 松地编写一个存储索引库数据访问层。 官方网站 : https://spring.io/projects/spring-data-elasticsearch 3.Spring Data Elasticsearch 版本对比 目前最新 springboot 对应 Elasticsearch7.6.2Spring boot2.3.x 一般可以兼容 Elasticsearch7.x
4.框架集成
1. 创建 Maven 项目
2. 修改 pom 文件增加依赖关系 ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.6.RELEASE/versionrelativePath//parentgroupIdcom.atguigu.es/groupIdartifactIdspringdata-elasticsearch/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-elasticsearch/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-test/artifactId/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactId/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactId/dependency/dependencies
/project 3.增加配置文件 在 resources 目录中增加 application.properties 文件 # es服务地址
elasticsearch.host127.0.0.1
# es服务端口
elasticsearch.port9200
# 配置日志级别,开启debug日志
logging.level.com.atguigu.esdebug 4. SpringBoot 主程序 package es;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class SpringDataElasticSearchMainApplication {public static void main(String[] args) {SpringApplication.run(SpringDataElasticSearchMainApplication.class,args);}
}5. 数据实体类 package es;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;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;//图片地址
}6. 配置类 ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类和其他 spring 项目中的 template 类似。 在新版的 spring-data-elasticsearch 中ElasticsearchRestTemplate 代替了原来的 ElasticsearchTemplate。 原因是 ElasticsearchTemplate 基于 TransportClientTransportClient 即将在 8.x 以后的版本中移除。所 以我们推荐使用 ElasticsearchRestTemplate。 ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类继承 AbstractElasticsearchConfiguration并实现 elasticsearchClient()抽象方法创建 RestHighLevelClient 对 象。 package es;import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;ConfigurationProperties(prefix elasticsearch)
Configuration
Data
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {private String host ;private Integer port ;//重写父类方法Overridepublic RestHighLevelClient elasticsearchClient() {RestClientBuilder builder RestClient.builder(new HttpHost(host, port));RestHighLevelClient restHighLevelClient new RestHighLevelClient(builder);return restHighLevelClient;}
}7. DAO 数据访问对象 package es;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;Repository
public interface ProductDao extends ElasticsearchRepositoryProduct,Long {
}8. 实体类映射操作 package es;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;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;//图片地址
}9. 索引操作 package es;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.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;RunWith(SpringRunner.class)
SpringBootTest
public class SpringDataESIndexTest {Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;//创建索引并增加映射配置Testpublic void createIndex(){System.out.println(创建索引);}Testpublic void deleteIndex(){//创建索引系统初始化会自动创建索引boolean flg elasticsearchRestTemplate.deleteIndex(Product.class);System.out.println(删除索引 flg);}
}10. 文档操作 package es;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.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
RunWith(SpringRunner.class)
SpringBootTest
public class SpringDataESProductDaoTest {Autowiredprivate ProductDao productDao;/*** 新增*/Testpublic void save(){Product product new Product();product.setId(2L);product.setTitle(华为2手机);product.setCategory(手机);product.setPrice(2999.0);product.setImages(http://www.atguigu/hw.jpg);productDao.save(product);}//修改Testpublic void update(){Product product new Product();product.setId(2L);product.setTitle(小米 2 手机);product.setCategory(手机);product.setPrice(9999.0);product.setImages(http://www.atguigu/xm.jpg);productDao.save(product);}//根据 id 查询Testpublic void findById(){Product product productDao.findById(2L).get();System.out.println(product);}//查询所有Testpublic void findAll(){IterableProduct products productDao.findAll();for (Product product : products) {System.out.println(product);}}//删除Testpublic void delete(){Product product new Product();product.setId(1L);productDao.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.0i);product.setImages(http://www.atguigu/xm.jpg);productList.add(product);}productDao.saveAll(productList);}//分页查询Testpublic void findByPageable(){//设置排序(排序方式正序还是倒序排序的 id)Sort sort Sort.by(Sort.Direction.ASC,id);int currentPage0;//当前页第一页从 0 开始1 表示第二页int pageSize 5;//每页显示多少条//设置查询分页PageRequest pageRequest PageRequest.of(currentPage, pageSize,sort);//分页查询PageProduct productPage productDao.findAll(pageRequest);for (Product Product : productPage.getContent()) {System.out.println(Product);}}
} 11.文档搜索 package es;import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
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.data.domain.PageRequest;
import org.springframework.test.context.junit4.SpringRunner;
RunWith(SpringRunner.class)SpringBootTest
public class SpringDataESSearchTest {Autowiredprivate ProductDao productDao;/*** term 查询* search(termQueryBuilder) 调用搜索方法参数查询构建器对象*/Testpublic void termQuery(){TermQueryBuilder termQueryBuilder QueryBuilders.termQuery(category, 手机);IterableProduct products productDao.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(category, 手机);IterableProduct products productDao.search(termQueryBuilder,pageRequest);for (Product product : products) {System.out.println(product);}}
} 整体界面