1、什么是Spring Data

  Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

2、什么是Spring Data ElasticSearch

  Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API进行封装 。Spring Data为Elasticsearch项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域为中心的模型与Elastichsearch交互文档和轻松地编写一个存储库数据访问层。

3.Spring Data ElasticSearch环境  

     1.1 环境搭建
            步骤一:Spring-Data-ElasticSearch,Spring-test帮助你加载配置文件并且测试
                ESTemplate模板,模板当中包含了一系列的方法
               导入依赖:

 
          <dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.1.9.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport‐netty4‐client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.5.RELEASE</version>
<scope>test</scope>
</dependency>
 

步骤二:创建Spring的核心配置文

 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd">
<!--开启包扫描-->
<context:component-scan base-package="com.wdksoft"/>
<!--配置集群信息-->
<elasticsearch:transport-client id="esClient" cluster-name="my-elasticsearch" cluster-nodes="127.0.0.1:9300,127.0.0.1:9301,127.0.0.1:9302"/>
<!--注入ESTemplate模板-->
<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="esClient"/>
</bean>
<!--扫描Mapper-->
<elasticsearch:repositories base-package="com.wdksoft.mapper"/>
</beans>

2.SpringDataES案例
        
        2.1 添加索引库

 
       @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class SpringDataESTest {
//植入模板对象
@Resource
private ElasticsearchTemplate elasticsearchTemplate; @Test
public void createIndex(){
//创建空的索引库
elasticsearchTemplate.createIndex(Hello.class); }
}

2.2 添加索引库并且指定Mapping信息
            利用POJO映射Mapping信

 
         @Document(indexName = "my-index",type = "hello")
public class Hello {
@Id
@Field(type = FieldType.Long,index = false,store = true)
private Long id;
@Field(type = FieldType.Text,index = true,store = true,analyzer = "ik_max_word")
private String title;
@Field(type = FieldType.Text,index = true,store = true,analyzer = "ik_max_word")
private String content;
}
 
          @Test
public void createIndex(){
//创建空的索引库
elasticsearchTemplate.+(Hello.class);
elasticsearchTemplate.putMapping(Hello.class); }

2.3 添加文档数据
            创建Mapper层接口:

 
                /**
* 数据访问层接口
*/
@Repository
public interface HelloMapper extends ElasticsearchRepository<Hello,Long> {
}

创建Service层接口

                public interface HelloService {
public void save(Hello hello);
}

创建Service层接口实现类

 
                @Service("helloService")
public class HelloServiceImpl implements HelloService {
//植入Mapper层对象
@Resource
private HelloMapper helloMapper; @Override
public void save(Hello hello) {
helloMapper.save(hello);
}
}

测试:

 
/**
* 添加文档数据
*/
@Test
public void createDocument(){
for(long i=1l;i<=10l;i++){
Hello hello=new Hello();
hello.setId(i);
hello.setTitle("新增的Title数据"+i);
hello.setContent("新增的Content数据"+i);
helloService.save(hello);
}

2.4 删除文档数据
                Service层接口

                    //根据文档ID删除
public void deleteById(long id);
//删除全部
public void deleteAll();

Service层接口实现类

 
                    @Override
public void deleteById(long id) {
helloMapper.deleteById(id);
} @Override
public void deleteAll() {
helloMapper.deleteAll();
}

测试:

 
            /**
* 删除文档数据
*/
@Test
public void deleteDocument(){
//根据文档ID删除
helloService.deleteById(1l);
//全部删除
helloService.deleteAll();
}

2.5 修改文档数据

  修改也是调用save方法,如果id不存在则添加,id存在则先删除再添加

 
            /**
* 修改文档数据:先删除再添加,调用的还是save方法
*/
@Test
public void updateDocument(){
Hello hello=new Hello();
hello.setId(1l);
hello.setTitle("[修改]新增的Title数据");
hello.setContent("[修改]新增的Content数据");
helloService.save(hello);
}

2.6 根据ID查询
            Service层接口

                    //根据文档ID查询数据
public Optional<Hello> findById(Long id);

Service层接口实现类

                    @Override
public Optional<Hello> findById(Long id) {
return helloMapper.findById(id);
}

测试:

 
                /**
* 根据文档ID查询
*/
@Test
public void getDocumentById(){
Optional<Hello> optional = helloService.findById(2l);
Hello hello = optional.get();
System.out.println(hello);

2.7 查询全部文档数据
            Service层接口

                //查询所有数据
public Iterable<Hello> findAll();
//查询所有数据包含分页
public Page<Hello> findAll(Pageable pageable);

Service层接口实现类

 
                @Override
public Iterable<Hello> findAll() {
return helloMapper.findAll();
} @Override
public Page<Hello> findAll(Pageable pageable) {
return helloMapper.findAll(pageable);
}

测试:

 
                /**
* 查询所有文档数据
*/
@Test
public void getAllDocument(){
Iterable<Hello> iterable = helloService.findAll();
iterable.forEach(item-> System.out.println(item));
}
/**
* 查询所有文档数据加分页
*/
@Test
public void getDocumentPage(){
//指定分页规则
Page<Hello> page = helloService.findAll(PageRequest.of(0, 5));
for (Hello hello:page.getContent()) {
System.out.println(hello);
}
}

2.8 根据查询方法的自定义规则进行数据查询
            根据Title域进行查询,并且加分页
                Mapper层接口:

 
                    /**
* 数据访问层接口
*/
@Repository
public interface HelloMapper extends ElasticsearchRepository<Hello,Long> {
//根据Title域中的关键词查找数据
public List<Hello> findByTitle(String str);
//根据Title域中的关键词查找数据
public List<Hello> findByTitle(String str, Pageable pageable);
}

Service层接口

                        //根据Title域中的关键词查找数据
public List<Hello> findByTitle(String str);
//根据Title域中的关键词查找数据
public List<Hello> findByTitle(String str, Pageable pageable);

Service层接口实现类

 
                    @Override
public List<Hello> findByTitle(String str) {
return helloMapper.findByTitle(str);
} @Override
public List<Hello> findByTitle(String str, Pageable pageable) {
return helloMapper.findByTitle(str,pageable);
}

测试:

 
                    /**
* 根据条件查询文档数据加分页
*/
@Test
public void getDocumentByTitle(){
/*List<Hello> helloLists = helloService.findByTitle("修改");
helloLists.stream().forEach(item-> System.out.println(item));*/ List<Hello> helloLists = helloService.findByTitle("新增", PageRequest.of(0, 5));
helloLists.stream().forEach(item-> System.out.println(item)); }

2.9 NativeSearchQuery

  将输入的查询条件先分词,再进行查询

 
            /**
* 根据一段内容查询数据:NativeSearchQuery
* 先分词再查询
*/
@Test
public void getDocumentQuery(){
//创建NativeSearchQueryBuilder对象
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//指定查询规则
NativeSearchQuery build = nativeSearchQueryBuilder.withQuery(QueryBuilders.queryStringQuery("搜索新增").defaultField("title"))
.withPageable(PageRequest.of(0,5)).build();
//使用ESTemplates执行查询
List<Hello> hellos = elasticsearchTemplate.queryForList(build, Hello.class);
hellos.stream().forEach(item-> System.out.println(item));
}

Spring Data ElasticSearch的使用的更多相关文章

  1. elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...

  2. Elasticsearch基本用法(2)--Spring Data Elasticsearch

    Spring Data Elasticsearch是Spring Data项目下的一个子模块. 查看 Spring Data的官网:http://projects.spring.io/spring-d ...

  3. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

  4. spring data elasticsearch 使用

    很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ...

  5. Spring Boot + Spring Data + Elasticsearch实例

    Spring Boot + Spring Data + Elasticsearch实例 学习了:https://blog.csdn.net/huangshulang1234/article/detai ...

  6. elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

    elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...

  7. How to provide highlighting with Spring data elasticsearch

    How to provide highlighting with Spring data elasticsearch @Test public void shouldReturnHighlighted ...

  8. springboot集成spring data ElasticSearch

    ES支持SpringBoot使用类似于Spring Data Jpa的方式查询,使得查询更加方便. 1.依赖引入 compile “org.springframework.boot:spring-bo ...

  9. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  10. SpringBoot整合Spring Data Elasticsearch

    Spring Data Elasticsearch提供了ElasticsearchTemplate工具类,实现了POJO与elasticsearch文档之间的映射 elasticsearch本质也是存 ...

随机推荐

  1. 关于final关键字

    final修饰基本数据类型时 修饰的变量值不可变 final修饰引用数据类型时 修饰的变量地址不可变 值可变 final修饰一个类中的方法时 不可被子类重写 final修饰一个类时 不可被其他类继承 ...

  2. OSPF多区域的进阶强化版

    OSPF多区域 1.OSPF多区域原理 2.末梢区域配置 1.生成OSPF多区域的的原因:改善网络的可扩展性,快速收敛. OSPF的三种通信量:a域内通信量(单个区域内的路由器之间交换数据包构成的通信 ...

  3. ubuntu中codeblocks设置代码黑色主题配色

    说明 网上资料较杂乱,特整理以备留用和他人参阅. 配置文件下载 首先下载配置文件,命名为default.conf. 配置文件 官方配置文件网址 将配置文件替换ubuntu如下路径内的default.c ...

  4. 晋升挂了!leader说不是我技术不行

    大家好,我是对白. 今天给大家分享一位朋友在互联网大厂晋升失败的故事,不是每一位校招生第一年都可以稳稳晋升的,这不仅取决于你的业务收益,还取决于你是否会包装自己的项目,以下为原文. 晋升 去年秋季,我 ...

  5. Lesson11——NumPy 位运算

    NumPy 教程目录 Lesson11--NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitw ...

  6. Spring Boot数据访问之数据源自动配置

    Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...

  7. vue前端渲染和thymeleaf模板渲染冲突问题

    vue前端渲染和thymeleaf模板渲染冲突问题 话不多说直接上现象: 解决办法: 在此做个记录吧,说不定以后会碰到 <<QIUQIU&LL>>

  8. Wi-Fi DFS与TPC介绍

    DFS与TPC是wifi认证的其中一项测试内容,如果不需要DFS功能,可以不进行测试,但是某些属于DFS频段的wifi信道则不允许使用. 1. 什么是WIFI Auto DFS? 通俗的说就是:躲雷达 ...

  9. Unicode 详细介绍

    总结起来为啥需要Unicodey就是为了适应全球化的发展,便于不同语言之间的兼容交互,而ASCII不再能胜任此任务了 UTF-8 与UTF-16的区别 UTF-8的优缺点 程序员那么到底该如何选择呢? ...

  10. URLEncoder和URLDecoder转码

    目前看是为了解决网络传输的中文乱码问题 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import  ...