【Elasticsearch】整合Spring Data Elasticsearch(一)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【Elasticsearch】整合Spring Data Elasticsearch

整合Spring Data Elasticsearch

如何查看官方文档(了解)

官方文档:Java High Level REST Client | Java REST Client [6.8] | Elastic


下面是获得文档的方式(可以不用看):


1.步骤一:查询“文档”


87d04c7124f74d9995131e3d94e9c9d5.png


1.步骤二:查看“客户端Client”文档


4f437c418f59485096002a7faa097815.png


1.步骤三:查看基于REST的api


4eb6c9529fae4b868b02ad944229d103.png


1.步骤四:确定使用的版本


34fcbb3c044d44b5814ec8541414dd2d.png


1.步骤五:选择使用的API基本

  1. Low Level Rest Client是低级别封装,提供一些基础功能,但更灵活
  2. High Level Rest Client,是在Low  Level Rest Client基础上进行的高级别封装,功能更丰富和完善


0a30c0dd51f242e2a8a8e31571b40075.png


简介


Spring Data Elasticsearch是Spring Data项目下的一个子模块。


简化了原生的Elasticsearch的开发。


什么是spring data


查看 Spring Data的官网:http://projects.spring.io/spring-data/


Spring Data 是的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率。


包含很多不同数据操作的模块:


72ace015958a425eaf854830dd4ac158.png

ce5613b36cf041dfa8f71820fec6a8cb.png



什么是spring data elasticsearch


Spring Data Elasticsearch的页面:https://projects.spring.io/spring-data-elasticsearch/


特征:


  • 支持Spring的基于@Configuration的java配置方式
  • 提供了用于操作ES的便捷工具类ElasticsearchTemplate。包括实现文档到POJO之间的自动智能映射。
  • 利用Spring的数据转换服务实现的功能丰富的对象映射
  • 基于注解的元数据映射方式,而且可扩展以支持更多不同的数据格式
  • 根据持久层接口自动生成对应实现方法,无需人工编写基本操作代码(类似mybatis,根据接口自动得到实现)。当然,也支持人工定制查询

2e63d3097066401b9263d0bea0c012f6.png



版本限定

https://docs.spring.io/spring-data/elasticsearch/docs/4.2.1/reference/html/#preface.versions


24e4b639ee5446deadb3492b8460abe7.png



创建Demo工程

我们新建一个test-elasticsearch,学习Elasticsearch


1.pom依赖:

<?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">
    <parent>
        <artifactId>changgou4-parent-ali</artifactId>
        <groupId>com.czxy.changgou</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>test-elasticsearch</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>


1.配置工具类


99bf13139e174d689bf5083889cf7b8f.png

Initialization | Java REST Client [6.8] | Elastic
package com.czxy.changgou4.config;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
@Configuration
@EnableElasticsearchRepositories
public class RestClientConfig extends AbstractElasticsearchConfiguration {
    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();
        return RestClients.create(clientConfiguration).rest();
    }
}


1.启动类

package com.czxy.changgou4;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
@SpringBootApplication
public class TestESApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestESApplication.class,args);
    }
}


1.测试类

package com.czxy.changgou4;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestESApplication.class)
public class TestES {
    @Test
    public void testDemo() {
        System.out.println("....");
    }
}

1.索引操作

创建索引和映射

2.实体类:首先我们准备好实体类:

public class Item {
     private Long id;
     private String title; //标题
     private String category; //分类
     private String brand; //品牌
     private Double price; //价格
    private String images; //图片地址
}


1.映射

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:


@Document 作用在类,标记实体类为文档对象,一般有两个属性

  • indexName:对应索引库名称
  • type:对应在索引库中的类型
  • shards:分片数量,默认5
  • replicas:副本数量,默认1

@Id 作用在成员变量,标记一个字段作为id主键

@Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:

  • type:字段类型,是是枚举:FieldType
  • index:是否索引,布尔类型,默认是true
  • store:是否存储,布尔类型,默认是false
  • analyzer:分词器名称

示例:

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)
public class Item {
    @Id
    private Long id;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String title; //标题
    @Field(type = FieldType.Keyword) //不分词
    private String category;// 分类
    @Field(type = FieldType.Keyword)
    private String brand; // 品牌
    @Field(type = FieldType.Double)
    private Double price; // 价格
    @Field(index = false, type = FieldType.Keyword)
    private String images; // 图片地址
}


创建索引

package com.czxy;
import com.czxy.changgou4.TestESApplication;
import com.czxy.changgou4.domain.Item;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestESApplication.class)
public class TestES {
    @Resource
    private ElasticsearchRestTemplate elasticsearchTemplate;
    @Test
    public void testCreateIndex() {
        elasticsearchTemplate.createIndex(Item.class);
    }
}

可以根据类的信息自动生成,也可以手动指定indexName和Settings

映射


映射相关的API:


ca987424ca8e438d92e31becb005c00d.png


一样,可以根据类的字节码信息(注解配置)来生成映射,或者手动编写映射

我们这里采用类的字节码信息创建索引并映射:


package com.czxy;
import com.czxy.pojo.Item;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
 * Created by liangtong.
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ESApplication.class)
public class TestES {
    @Resource
    private ElasticsearchTemplate elasticsearchTemplate;
    @Test
    public void createIndex(){
        elasticsearchTemplate.createIndex(Item.class );
        elasticsearchTemplate.putMapping(Item.class);
    }
}


结果:

77a7f0e8b5d748a09eb98d5ebadab9ec.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
34 9
|
2月前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
【Java笔记+踩坑】Spring Data JPA
|
3月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
41 0
|
4月前
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
217 1
|
3月前
|
存储 Java 数据库
|
3月前
|
存储 Java API
|
3月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
75 0
|
4月前
|
存储 Java 关系型数据库
Spring Data与多数据源配置
Spring Data与多数据源配置
|
4月前
|
存储 监控 Java
Spring Cloud Data Flow的实时数据处理
Spring Cloud Data Flow的实时数据处理
|
4月前
|
监控 Java 数据处理
Spring Cloud Data Flow的实时数据处理详解
Spring Cloud Data Flow的实时数据处理详解