描述
戳我查看源码
springboot2.3.3中操作elasticsearch非常简单,一般的查询只需定义一个接口即可。
注意:我是用的es版本是7.6.2,是springboot2.3.3中默认的es版本,如果您的版本不一致,更换elasticsearch的依赖版本即可。
如果您还没有安装elasticsearch,可参见我的博客:
docker-compose + elasticsearch7.6(配置密码及证书) + kibana7.6 + elasticsearch-head快速搭建集群
对象映射
首先要清楚注解的使用。
-
@Document:类注解,以指示该类是映射到数据库的候选对象。最重要的属性是:
-
indexName:用于存储此实体的索引的名称
-
type:映射类型。如果未设置,则使用小写的类的简单名称。(当前版本开始不推荐使用) -
shards:索引的分片数。
-
replicas:索引的副本数。
-
refreshIntervall:索引的刷新间隔。用于索引创建。默认值为“ 1s”。
-
indexStoreType:索引的索引存储类型。用于索引创建。默认值为“ fs”。
-
createIndex:配置是否在存储库引导中创建索引。默认值为true。
-
versionType:版本管理的配置。默认值为EXTERNAL。
-
-
@Id:字段注解,以标记用于标识目的的字段。
-
@Field:在字段级别应用并定义字段的属性,大多数属性映射到各自的Elasticsearch映射定义(以下列表不完整,请查看注释Javadoc以获取完整的参考):
-
name:字段名称,它将在Elasticsearch文档中表示,如果未设置,则使用Java字段名称。
-
type:字段类型,可以是文本,关键字,长整数,短整数,字节,双精度,浮点型,半浮点数,标度浮点数,日期,布尔值,二进制,整数等。
-
format和日期类型的pattern定义。必须为日期类型定义。
-
store:标记是否将原始字段值存储在Elasticsearch中,默认值为false。
-
analyzer,searchAnalyzer,normalizer用于指定自定义分析和正规化。
-
-
@GeoPoint:将字段标记为geo_point数据类型。如果字段是GeoPoint类的实例,则可以省略。
pom文件
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.framework</groupId>
<artifactId>springboot-elasticsearch</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>springboot-elasticsearch</name>
<url>https://github.com/aLiang-xyl/springboot-elasticsearch</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.boot.version>2.3.3.RELEASE</spring.boot.version>
</properties>
<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-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
实例对象
这里我定义了两个对象的demo,Person和Company。对象Person中有一个属性company,用来表示该人员属于哪个公司。
package com.framework.example.entity;
import java.time.LocalDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations