Elasticsearch 整合springboot-Elasticsearch文章二

文章目录

官网

https://www.elastic.co/cn/

版本

https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/


我们选用的是elasticsearch 7.17.9版本,对应的,我们需要升级springboot版本,对应的中间件都需要升级

组件版本说明

Springboot: 2.7.10

spring-data-elasticsearch: 4.4.10

spring-boot-starter-data-elasticsearch: 2.7.10

实现代码地址

https://github.com/OrderDong/microservice-boot

分支:microservice-boot-1.0.6-es

microservice-boot-eleastic模块

pom.xml

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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


        <!--elastic search 7.17.9 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <!-- spring-data-elasticsearch 包含此包
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.17.9</version>
        </dependency>-->

        <!-- Reactive Infrastructure -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>io.projectreactor.netty</groupId>
            <artifactId>reactor-netty-http</artifactId>
        </dependency>

application.yml

xml 复制代码
spring:
  # Jackson 配置项
  jackson:
    #    serialization:
    #      write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
    #      write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401
    #      write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳
    #      fail-on-empty-beans: false # 允许序列化无属性的 Bean
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  application:
    name: microservice-boot-es
  elasticsearch:
    uris: 10.255.20.231:9200
server:
  port: 8023
  tomcat:
    uri-encoding: UTF-8
    max-connections: 40000

Repository

java 复制代码
package org.lwd.microservice.boot.es.dao;

import org.lwd.microservice.boot.es.entity.VisitLog;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author weidong
 * @version V1.0.0
 * @since 2023/7/26
 */
@Repository
public interface VisitLogRepository extends ElasticsearchRepository<VisitLog, String> {

    //自定义规则
    List<VisitLog> findByUserLoginId(Integer userLoginId);
}

VisitLog模型定义

java 复制代码
package org.lwd.microservice.boot.es.entity;

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 系统访问日志
 * </p>
 *
 * @author lwd
 * @since 2023-07-26
 */
@Getter
@Setter
@Document(indexName = "visit_log")
public class VisitLog implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     *访问id
     */
    @Id
    private Integer id;

    /**
     * 不同业务表明
     */
    private String tableName;
    /**
     *登录账号
     */
    private String userLoginId;

    /**
     *服务ip
     */
    private String serverIpAddress;

    /**
     *服务名
     */
    private String serverHostName;

    /**
     *请求url
     */
    private String initialRequest;

    /**
     *消息内容
     */
    private String msgContent;

    /**
     *创建时间
     */
    private Date createTime;

}

controller使用

中间服务层定义掠过了。。。。

java 复制代码
package org.lwd.microservice.boot.es.controller;

import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.client.RestHighLevelClient;
import org.lwd.microservice.boot.es.entity.VisitLog;
import org.lwd.microservice.boot.es.service.VisitLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.*;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.data.elasticsearch.core.query.StringQuery;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.List;

/**
 * @author weidong
 * @version V1.0.0
 * @since 2023/7/26
 */
@Slf4j
@RestController
@RequestMapping("/es")
public class VisitLogController {
    @Autowired
    VisitLogService visitLogService;

    //rest模版操作
    @Autowired
    ElasticsearchOperations elasticsearchOperations;

    //响应式模版操作
    @Autowired
    ReactiveElasticsearchOperations reactiveElasticsearchOperations;


    @PostMapping("/saveVisitLog")
    @ResponseBody
    public String saveVisitLog(@RequestBody VisitLog visitLog){
        VisitLog saveVisitLog = visitLogService.saveVisitLog(visitLog);
        log.info("----saveVisitLog----:{}", JSON.toJSONString(saveVisitLog));
        return JSON.toJSONString(saveVisitLog);
    }

    @GetMapping("/getVisitLogAll")
    @ResponseBody
    public String getVisitLogAll(){
        List<VisitLog> logList = visitLogService.findAll();
        log.info("----getVisitLogAll----:{}", JSON.toJSONString(logList));
        return JSON.toJSONString(logList);
    }

    //自定义查询
    @GetMapping("/getVisitLogByUserLoginId")
    @ResponseBody
    public String getVisitLogByUserLoginId(Integer userLoginId){
        List<VisitLog> logList = visitLogService.findByUserLoginId(userLoginId);
        log.info("----getVisitLogAll----:{}", JSON.toJSONString(logList));
        return JSON.toJSONString(logList);
    }
}

测试http请求

TestEs.http

xml 复制代码
## 新增日志
POST http://localhost:8023/es/saveVisitLog
Content-Type: application/json

{
  "id": 3,
  "tableName": "VisitLog",
  "userLoginId": 3,
  "serverIpAddress": "127.0.0.1",
  "serverHostName": "weidong",
  "initialRequest": "http://localhost:8023",
  "msgContent": "test es add3",
  "createTime": "2023-07-27 16:34:36"
}


### 获取所有数据-不分页

GET http://localhost:8023/es/getVisitLogAll

### 获取所有数据-自定义查询规则

GET http://localhost:8023/es/getVisitLogByUserLoginId?userLoginId=1

结果

kibana结果

@ID

如果不赋值给ID,那么es会自动生成一个字符串,但是,获取数据可能出问题

外传

复制代码
😜 原创不易,如若本文能够帮助到您的同学
🎉 支持我:关注我+点赞👍+收藏⭐️
📝 留言:探讨问题,看到立马回复
💬 格言:己所不欲勿施于人 扬帆起航、游历人生、永不言弃!🔥
相关推荐
sg_knight7 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
Dolphin_Home9 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
刘一说10 小时前
Nacos 权限控制详解:从开源版 v2.2+ 到企业级安全实践
spring boot·安全·spring cloud·微服务·nacos·架构·开源
Q_Q51100828511 小时前
python+django/flask+vue的大健康养老公寓管理系统
spring boot·python·django·flask·node.js
czlczl2002092512 小时前
通过哪些条件确定用哪个消息转换器
spring boot
毕设源码-朱学姐13 小时前
【开题答辩全过程】以 个人健康管理系统为例,包含答辩的问题和答案
java·spring boot
qq_124987075313 小时前
基于微信小程序的线下点餐系统的设计与实现(源码+论文+部署+安装)
spring boot·微信小程序·小程序·毕业设计
IT_Octopus13 小时前
Java GZip 压缩实践 +实践思考 +进一步压榨性能和存储方案思考:Protobuf+ GZip
java·spring boot
Elastic 中国社区官方博客13 小时前
Elasticsearch 中使用 NVIDIA cuVS 实现最高快 12 倍的向量索引速度:GPU 加速第 2 章
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·数据库架构
毕设源码-郭学长14 小时前
【开题答辩全过程】以 高校教材大管家系统为例,包含答辩的问题和答案
java·spring boot