一、ElasticSearch与SpringBoot版本对应:
Spring Boot | Spring Data Elasticsearch | Elasticsearch |
---|---|---|
2.4.x | 4.1.x | 7.9.x |
2.5.x | 4.2.x | 7.12.x |
2.6.x | 4.3.x | 7.15.x |
2.7.x | 4.4.x | 7.17.x |
我选择了springboot2.7.14和ElasticSearch7.16.2,按照如下pom文件配置导入依赖。(自动导入Spring Data Elasticsearch包版本为4.4.14)
二、maven依赖导入
<!--引入es相关依赖-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.16.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.16.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
注:如果你的es版本为7.16.2可将springboot版本更为2.7.14 ,确保下面两个配置均为2.7.14
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.14</spring-boot.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.7.14-SNAPSHOT</version>
<scope>test</scope>
</dependency>
这是我的相关包及版本,如果遇到无法自动导入的问题,可以手动引入这些包及版本
三、yml配置文件
spring:
elasticsearch:
uris: http://ip:端口
#如果没有账号密码可不设置
username:
password:
connection-timeout: 10s # 连接超时时间(默认1s)
socket-timeout: 30s # 数据读取超时时间(默认30s)
log:
level: info
path: ./logs
四、构造对应ES索引实体类
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;
/**
* @ClassName EsBaseEntity
* @Description
* @Author ly
* @Version 1.0
* @Create 2024-08-28 15:31
*/
@Document(indexName = "esbaseenetity" ,shards = 3,replicas = 1,createIndex = true)
public class EsBaseEntity {
@Id
@Field(name="_id")
private String id;
@Field(name="FLAG" )
private String flag;
@Field(name = "NS_NO")
private String nsNo;
@Field(name = "TAG_NO")
private String tagNo;
@Field(name = "SIGN")
private String sign;
@Field(name="REQUIRE")
private Long REQUIRE;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getnsNo() {
return nsNo;
}
public void setPcNo(String nsNo) {
this.nsNo = nsNo;
}
public String getTagNo() {
return tagNo;
}
public void setTaNo(String tagNo) {
this.tagNo = tagNo;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public Long getREQUIRE() {
return REQUIRE;
}
public void setREQUIRE(Long REQUIRE) {
this.REQUIRE = REQUIRE;
}
}
确保每一个变量都能跟es索引(数据库表)的映射(字段)对上 。
注解说明:
@Document :
应用于类级别,表示该类是映射到数据库的候选对象。
indexName :存储此实体的索引名称,可包含 SpEL 模板表达式。
createIndex :标记在存储库引导中是否创建索引,默认值为 true 。
versionType :版本管理的配置,默认值为 EXTERNAL 。
@Id :
应用于字段级别,标记用于标识目的的字段。
@Transient :
应用于字段,默认情况下所有字段都映射到文档,该注释使此字段不被包含。
@PersistenceConstructor :
标记从数据库实例化对象时要使用的给定构造函数,参数按名称映射到检索到的文档中的键值。
@Field :
应用于字段级别,定义字段属性。
属性包括:
name :字段在 Elasticsearch 文档中的名称,未设置时使用 Java 字段名称。
type :字段类型,如多种类型可选。
format 和日期类型的 pattern :日期类型必须定义。
store :标记是否存储原始字段值,默认值为 false 。
analyzer 、 searchAnalyzer 、 normalizer :用于指定自定义分析和正规化。
@GeoPoint :
将字段标记为 geo_point 数据类型,若字段是 GeoPoint 类实例可省略。
@ValueConverter :
定义用于转换给定属性的类,仅转换带注释的属性。
@Setting :
定义不同的索引设置。
参数包括:
useServerConfiguration :不发送任何设置参数,由 Elasticsearch 服务器配置确定。
settingPath :指定义必须在类路径中解析的设置的 JSON 文件。
shards :要使用的分片数,默认为 1 。
replicas :副本数,默认为 1 。
refreshIntervall :默认为 1s 。
indexStoreType :默认为 fs 。
五、 ElasticsearchRepository操作接口(DAO)
import com.dytg.materialapi.entity.EsBaseEntity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @ClassName EsService
* @Description
* @Author lyw
* @Version 1.0
* @Create 2024-08-28 15:48
*/
@Repository
public interface EsBaseEntityRepository extends ElasticsearchRepository<EsBaseEntity,String> {
List<EsBaseEntity> findEsBaseEntityByFlagAndTagNoAndSign(String flag,String tagNo,String sign);
}
ElasticsearchRepository有一套标准的方法命名规范,符合规范的方法名在输入的时候就会有提示,比如findByXXX,这个XXX就是你要按某个关键字搜索,也就是你的哪个变量,如果在前面的实体类构造没问题,那么这边当你输入某个关键字开头的时候便会有提示,如下图
除了And,你还可以使用Or这些词进行关联搜索。
不必要在这里面声明存储、删除方法,因为在其父接口中有CrudRepository接口,含存储、删除等方法。
六、使用demo
#
@Autowired
private EsBaseEntityRepository esBaseEntityRepository;
List<EsBaseEntity> EsBaseEntitysByFlagAndTaNoAndSign = esBaseEntityRepository.findEsBaseEntityByFlagAndTagNoAndSign(flag, tagNo, sign);
EsBaseEntity esBaseEntity = new EsBaseEntity();
esBaseEntity.setFlag("测试啊");
esBaseEntity.setTagNo("测试测试");
esBaseEntity.setSign("测试");
esBaseEntity.setnsNo("测试测试");
esBaseEntity.setId("KNrMnJEBHzabIKW7VGZR");
esBaseEntityRepository.delete(esBaseEntity);
esBaseEntityRepository.save(esBaseEntity);