当前位置: 首页 > article >正文

Spring Data Elasticsearch简介

一、Spring Data Elasticsearch简介

1 SpringData ElasticSearch简介
Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。

Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通过对原生API的封装,使得程序员可以简单的对ElasticSearch进行各种操作。
官网:https://spring.io/projects/spring-data-elasticsearch

spring-data-elasticsearch是比较好用的一个elasticsearch客户端。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。

Spring Data ElasticSearch有下边这几种方法操作ElasticSearch:

ElasticsearchRepository(传统的方法,可以使用)
ElasticsearchRestTemplate(推荐使用。基于RestHighLevelClient)
ElasticsearchTemplate(ES7中废弃,不建议使用。基于TransportClient)
RestHighLevelClient(推荐度低于ElasticsearchRestTemplate,因为API不够高级)
TransportClient(ES7中废弃,不建议使用)

二、Spring Data Elasticsearch版本问题

1)版本改动

spring-data-elasticsearch:4.0的比较重大的修改:4.0对应支持ES版本为7.6.2,并且弃用了对TransportClient的使用(默认使用High Level REST Client)。

ES从7.x版本开始弃用了对TransportClient的使用,并将会在8.0版本开始完全删除TransportClient。

TransportClient:使用9300端口通过TCP与ES连接,不好用,且有高并发的问题。

High Level REST Client:使用9200端口通过HTTP与ES连接,很好用,性能高。

2)版本对应

Elasticsearch 对于版本的兼容性要求很高,大版本之间是不兼容的。

spring-data-elasticsearch与ES、SpringBoot的对应关系如下:
在这里插入图片描述

三、依赖及配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置(application.yml )

spring:
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200
      # username: xxx
      # password: yyy
      # connection-timeout: 1
      # read-timeout: 30

实例索引结构:

{
    "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
    },
    "mappings": {
        "properties": {
            "id":{
                "type":"long"
            },
            "title": {
                "type": "text"
            },
            "content": {
                "type": "text"
            },
            "author":{
                "type": "text"
            },
            "category":{
                "type": "keyword"
            },
            "createTime": {
                "type": "date",
                "format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||epoch_millis"
            },
            "updateTime": {
                "type": "date",
                "format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||epoch_millis"
            },
            "status":{
                "type":"integer"
            },
            "serialNum": {
                "type": "keyword"
            }
        }
    }
}

Entity

package com.example.demo.entity;
 
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
 
import java.util.Date;
 
@Data
@Document(indexName = "blog", shards = 1, replicas = 1)
public class Blog {
    //此项作为id,不会写到_source里边。
    @Id
    private Long blogId;
 
    @Field(type = FieldType.Text)
    private String title;
 
    @Field(type = FieldType.Text)
    private String content;
 
    @Field(type = FieldType.Text)
    private String author;
 
    //博客所属分类。
    @Field(type = FieldType.Keyword)
    private String category;
 
    //0: 未发布(草稿) 1:已发布 2:已删除
    @Field(type = FieldType.Integer)
    private int status;
 
    //序列号,用于给外部展示的id
    @Field(type = FieldType.Keyword)
    private String serialNum;
 
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @Field(type= FieldType.Date, format= DateFormat.custom, pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Date createTime;
 
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @Field(type=FieldType.Date, format=DateFormat.custom, pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private Date updateTime;
}

http://www.kler.cn/a/502050.html

相关文章:

  • 【HM-React】08. Layout模块
  • C++ union 联合(八股总结)
  • C++语言的学习路线
  • 013:深度学习之神经网络
  • [免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】
  • 不同方式获取音频时长 - python 实现
  • 鸿蒙UI开发——颜色选择器
  • 【Ubuntu与Linux操作系统:七、系统高级管理】
  • 【论文速读】| 利用大语言模型在灰盒模糊测试中生成初始种子
  • Django Admin 中为自定义操作添加权限控制
  • Folder Icons v2.0.2 文件/文件夹图标美化 支持M、Intel芯片
  • 【南京工业大学主办 | JPCS独立出版 | 高届数、会议历史好 | 投稿领域广泛】第八届智能制造与自动化国际学术会议(IMA 2025)
  • Rank-Analysis——LOL 排位战绩查询分析器
  • 【LeetCode: 763. 划分字母区间 + 贪心】
  • Bash语言的语法糖
  • 对React中类组件和函数组件的理解?有什么区别?
  • ansible 检查目录大小
  • 【C++】size_t究竟是什么?全面解析与深入拓展
  • CSS3的aria-hidden学习
  • 每日一题(三):压缩字符串(行程长度编码)
  • vue城市道路交通流量预测可视化系统
  • 《变形金刚-游戏》V1.0官方学习版
  • Redis 为什么要引入 Pipeline机制?
  • C++中锁和互斥量的原理、区别和使用建议
  • 提升Docker运维效率:实用技巧与最佳实践
  • 【opencv】第8章 图像轮廓与图像分割修复