Java框架集成ES

news/2024/9/17 3:22:52/文章来源:https://www.cnblogs.com/wenxuehai/p/18204729

1、SpringData Elasticsearch框架集成

1.1、SpringData 框架基本介绍

Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD 外,还包括如分页、排序等一些常用的功能。

Spring Data 的官网:https://spring.io/projects/spring-data
Spring Data 常用的功能模块如下:

 

1.2、Spring Data Elasticsearch 框架基本介绍

Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作,将原始操作Elasticsearch 的客户端 API 进行封装 。Spring Data 为 Elasticsearch 项目提供集成搜索引擎。Spring Data Elasticsearch POJO 的关键功能区域为中心的模型与 Elastichsearch 交互文档和轻松地编写一个存储索引库数据访问层。官方网站: https://spring.io/projects/spring-data-elasticsearch 
Spring Data Elasticsearch 版本对比:

目前最新 springboot 对应 Elasticsearch7.6.2,Spring boot2.3.x 一般可以兼容 Elasticsearch7.x。

 

1.2、Spring Data Elasticsearch框架基本使用

首先创建一个简单的 java se Maven 项目,然后修改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"><modelVersion>4.0.0</modelVersion><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.6.RELEASE</version><relativePath/></parent><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</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-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency></dependencies>
</project>

在 resources 目录中增加application.properties文件,内容如下:

# es 服务地址
elasticsearch.host=127.0.0.1
# es 服务端口
elasticsearch.port=9200
# 配置日志级别,开启 debug 日志
logging.level.com.atguigu.es=debug

Spring Boot 主程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}

数据实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
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;@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(indexName = "shopping", shards = 3, replicas = 1)
public class Product {//必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id"
    @Idprivate Long id;//商品唯一标识/*** type : 字段数据类型* analyzer : 分词器类型* index : 是否索引(默认:true)* Keyword : 短语,不进行分词*/@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;//商品名称
@Field(type = FieldType.Keyword)private String category;//分类名称
@Field(type = FieldType.Double)private Double price;//商品价格
@Field(type = FieldType.Keyword, index = false)private String images;//图片地址
}

配置类

  • ElasticsearchRestTemplate是spring-data-elasticsearch项目中的一个类,和其他spring项目中的 template 类似。
  • 在新版的spring-data-elasticsearch 中,ElasticsearchRestTemplate 代替了原来的ElasticsearchTemplate。
  • 原因是ElasticsearchTemplate基于TransportClient,TransportClient即将在8.x 以后的版本中移除。所以,我们推荐使用ElasticsearchRestTemplate。
  • ElasticsearchRestTemplate基于RestHighLevelClient客户端的。需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现elasticsearchClient()抽象方法,创建RestHighLevelClient对象。

AbstractElasticsearchConfiguration源码:

package org.example;import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.data.elasticsearch.config.ElasticsearchConfigurationSupport;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;

public abstract class AbstractElasticsearchConfiguration extends ElasticsearchConfigurationSupport {//需重写本方法public abstract RestHighLevelClient elasticsearchClient();@Bean(name = { "elasticsearchOperations", "elasticsearchTemplate" })public ElasticsearchOperations elasticsearchOperations(ElasticsearchConverter elasticsearchConverter) {return new ElasticsearchRestTemplate(elasticsearchClient(), elasticsearchConverter);}
}

需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现elasticsearchClient()抽象方法,创建RestHighLevelClient对象,如下:

import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Data
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration{private String host ;private Integer port ;//重写父类方法
    @Overridepublic RestHighLevelClient elasticsearchClient() {RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));RestHighLevelClient restHighLevelClient = newRestHighLevelClient(builder);return restHighLevelClient;}
}

DAO 数据访问对象

import com.lun.model.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;@Repository
public interface ProductDao extends ElasticsearchRepository<Product, Long>{}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/710159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weblogic漏洞浅谈

weblogic反序列化漏洞原理分析 weblogic是oracle公司出品的application server,用于本地和云端开发,集成,部署和大型分布式web应用,网络应用和数据库应用的Java应用服务器 weblogic server是一个基于JAVAEE架构的中间件,将java的动态功能和java Enterprise标准的安全性引入…

强化学习Q-learning算法——Python实现

Q-learning是一种基于值迭代的强化学习(Reinforcement Learning, RL)算法,主要用于在给定环境中学习一个策略,使得智能体(agent)能够在与环境交互的过程中获得最大累计奖励。它通过学习一个状态-动作值函数(Q函数)来指导智能体的行为选择,适用于各种离散状态和动作的任…

mysql: Syntax error or access violation: 1055 Expression #2 of SELECT (错误解决办法)

Mysql报错:SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column seo.ryc_combo_class_cate_list_113.fid which is not functionally dependent on columns in GROUP BY cla…

【APIM】Azure APIM抛出 java.lang.RuntimeException 错误定位

问题描述 Azure APIM服务日志中发现 java.lang.RuntimeException 错误,在进一步通过Application Insights采集的错误信息日志,发现真实的请求错误为:‘The remote name could not be resolved xxxx.xxx.xx"。问题解答 APIM服务,在没有配置自定义的DNS服务器时,默认会…

原型设计工具——Pixso

Pixso 定位于产品设计协作一体化工具,能一站式完成原型、设计、交互与交付,打通产品、设计到研发的工作链路,全面覆盖产品原型、UI/UX设计、原型交互、设计交付全流程,浏览器即开即用。 Pixso的核心特点快捷的图形绘制:Pixso内设有许多快捷键方便用户一键绘图,也可以导入…

三维坐标转2维坐标

最近在帮朋友调代码,他们想出份报告,需要把三维的坐标系以一定的角度画到纸面上。 公式:x = xCosα + zCosβ y = y - zSinβ + xCosα 以下是公式推导过程 1. 先画平面直角坐标系(xy坐标系)和空间直角坐标系(xyz坐标系,本文用x,y,z表示),x轴和x轴之间的夹角为α,…

Windows安装Docker Desktop找不到hyper-v(Windows11家庭中文版没有hyper-v)

新建文本文件复制下面代码放进去pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findstr /i . hyper-v.txt 2^>nul) do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i&…

伙伴活动|W3C 标准带头人开讲 WebGPU 前沿趋势

提及 2023 年前端大事件,「WebGPU 的正式发布」无疑占据了一席之地。经过六年的精心打磨,WebGPU 的首个实现版本正式登陆 Chrome,不仅标志着浏览器图形性能的一大飞跃,也让众多从业者兴奋不已。WebGPU 允许网页代码以一种高性能且安全可靠的方式访问 GPU 功能,这一规范正由…

java中WGS84坐标(ios)转换BD-09坐标(百度坐标)

iPhone的GPS定位(CLLocationManager)获得的经纬坐标是基于WGS-84坐标系(世界标准),Google地图使用的是GCJ-02坐标系(中国特色的火星坐标系),百度的经纬坐标在GCJ-02的基础上再做了次加密,就是BD-09坐标系。public class CoordinateConversion {static double x_PI = 3.1…

【地图导航有讲究】教你识别合法地图

在这个数字化时代,地图已成为我们日常生活中不可或缺的导航工具。无论是纸质地图还是手机中的电子地图,准确合法的地图不仅能为我们指引方向,还关乎国家安全和社会秩序。那么,如何确保你手中的地图是合法的呢?今天,就让我们一起学习几个识别合法地图的小技巧。 了解地图的…

可视化理解constructor、prototype、__proto__形成的指向图

Person类和person实例 首先给出一段js代码:function Person() {} const person = new Person()根据以下规则:每个实例都有一个__proto__指向其原型对象。 每个构造函数都有一个prototype属性指向其实例的原型对象 每一个原型都有一个prototype指向其实例的构造函数。于是就有…

记一次MySQL执行修改语句超时问题

异常问题原因分析这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示The client was disconnected by the server because of inactivity. See wait_timeout and interactive…