SpringBoot集成 Spring-Data-ElasticSearch

SpringBoot整合Elasticsearch 1 SpringBoot整合Spring Data Elasticsearch Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己反序列化为对象 因此,我们这里就不讲解原生的Elasticsearch客户端API了。 而是学习Spring提供的套... 阅读详情

Elasticsearch Java API有四类client连接方式

  • TransportClient(不推荐)
  • RestClient
  • Jest(不推荐)
  • Spring Data Elasticsearch

其中TransportClient和RestClient是Elasticsearch原生的api。TransportClient可以支持2.x,5.x版本,TransportClient将会在Elasticsearch 7.0弃用并在8.0中完成删除,替而代之,我们使用Java High Level REST Client,它使用HTTP请求而不是Java序列化请求。
Jest是Java社区开发的,是Elasticsearch的Java Http Rest客户端;
RestClient官方提供的高阶、低阶Rest Client,官方维护,比较值得信赖
Spring Data Elasticsearch是spring集成的Elasticsearch开发包。

建议:
TransportClient将会在后面的版本中弃用,使用原生API操作ES,代码量大,撰写困难,因此不推荐后续使用;
Jest由于是社区维护,所以更新有一定延迟,目前最新版对接ES6.3.1,近一个月只有四个issue,说明整体活跃度较低,因此也不推荐使用;
Spring Data Elasticsearch主要是与Spring生态对接,可以在web系统中整合到Spring中使用,与SpringBoot,SpringData版本容易冲突
Rest Client目前比较推荐使用官方的高阶、低阶Rest Client,官方维护,比较值得信赖。本文主要介绍RestClient,其他的只做简单概述。

下面主要就推荐的两种方式提供一个demo作为参考

未完待续…

Rest Client

Spring Data Elasticsearch

官方文档:https://docs.spring.io/spring…
中文翻译:https://www.jianshu.com/p/27e…
入门参考:https://www.cnblogs.com/guozp…

Spring boot 2的spring-boot-starter-data-elasticsearch中支持的Elasticsearch 2.X版本,需要转向spring-data-elasticsearch,
https://github.com/spring-projects/spring-data-elasticsearch
文档参考如下
https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.RC3/reference/html/#preface.versions
个版本对应如下,注意版本不兼容问题

spring data elasticsearchelasticsearch
3.2.x6.5.0
3.1.x6.2.2
3.0.x5.5.0
2.1.x2.4.0
2.0.x2.2.0
1.3.x1.5.2

一、配置
spring-boot 2.0.2
spring-data-elasticsearch 3.0.7
elasticsearch 6.5.0 因为ES7.0对应的springboot官方还没有出现匹配的版本,只能降级使用6.5对应的版本

  1. Maven依赖
    <?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>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.2.RELEASE</version>
            <relativePath/>
        </parent>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            </dependency>
        </dependencies>
    </project>
  1. application.yml配置
spring:
   data:
        elasticsearch:
            #cluster-name: #默认为elasticsearch
            cluster-nodes: 127.0.0.1:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode(9200端口是http查询使用的。9300集群使用。这里使用9300.)
            properties:
                path:
                  logs: ./elasticsearch/log #elasticsearch日志存储目录
                  data: ./elasticsearch/data #elasticsearch数据存储目录

@Document

@Document注解里面的几个属性,类比mysql的话是这样:

index –> DB   
type –> Table   
Document –> row   

加上@Id注解后,在Elasticsearch里对应的该列就是主键了,在查询时就可以直接用主键查询。其实和mysql非常类似,基本就是一个数据库。

@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {
   String indexName();//索引库的名称,个人建议以项目的名称命名
   String type() default "";//类型,个人建议以实体的名称命名
   short shards() default 5;//默认分区数
   short replicas() default 1;//每个分区默认的备份数
   String refreshInterval() default "1s";//刷新间隔
   String indexStoreType() default "fs";//索引文件存储类型
}

@Field

加上了@Document注解之后,默认情况下这个实体中所有的属性都会被建立索引、并且分词。
通过@Field注解来进行详细的指定,如果没有特殊需求,那么只需要添加@Document即可。
@Field注解的定义如下:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {

   FieldType type() default FieldType.Auto;#自动检测属性的类型
   FieldIndex index() default FieldIndex.analyzed;#默认情况下分词
   DateFormat format() default DateFormat.none;
   String pattern() default "";
   boolean store() default false;#默认情况下不存储原文
   String searchAnalyzer() default "";#指定字段搜索时使用的分词器
   String indexAnalyzer() default "";#指定字段建立索引时指定的分词器
   String[] ignoreFields() default {};#如果某个字段需要被忽略
   boolean includeInParent() default false;
}
3. ElasticsearchRepository
//不需要加@Component,直接可以@Autowared
public interface ArticleSearchRepository extends ElasticsearchRepository<Article, Long> {
   List<Country> findByName(String name);
   //使用 Page<Country> countrys = articleSearchRepository.findByName("测试",  PageRequest.of(0, 10)); //分页是从0开始的
   Page<Country> findByName(String name, Pageable pageable); 
   Country findProductById(String name);

}

Page的方法:

getTotalElements() 匹配的总共有多少条数据
getTotalPages() 匹配的总共有多少页
getSize() 用户想在当前页获取的数量
getNumberOfElements() 当前页实际获取的数量
getPageable().getPageSize() 当前页获取的数量
getPageable().getPageNumber() 当前是多少页(从0开始,使用的时候需要+1)

示例

Country.java

@Document(indexName = "world", type = "country")
public class Country implements Serializable {

   @Id
   private Integer id;

   @Field(searchAnalyzer = "ik_max_word",analyzer = "ik_smart")
   private String name;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public Integer getId() {
       return id;
   }

   public void setId(Integer id) {
       this.id = id;
   }
}

CountrySearchRepository.java

public interface CountrySearchRepository extends ElasticsearchRepository<Country, Long> {
   List<Country> findCountryByName(String name);
   //使用 Page<Country> countrys = countrySearchRepository.findByName("测试",  PageRequest.of(0, 10)); //分页是从0开始的
   Page<Country> findCountryByName(String name, Pageable pageable); 
   Country findCountryById(String name);

}
SearchService.java

public class SearchService{

   @Autowared
   CountrySearchRepository countrySearchRepository;
 
   public Page<Country> getCountryByName(String name) {
       Page<Country> countrys = countrySearchRepository.findCountryByName("测试",  PageRequest.of(0, 10));
       return countrys;
   }
}

源码对应项目:springboot-Spring-data-elasticsearch
https://github.com/BambooZhang/springboot-study

参考资料

Elasticsearch 6.4基本操作 - Java版
https://www.cnblogs.com/swordfall/p/9981883.html
SpringBoot整合Elasticsearch
https://blog.youkuaiyun.com/chen_2890/article/details/83895646

https://www.cnblogs.com/swordfall/p/9981883.html

【必看】SpringBoot整合Spring Data Elasticsearch 整合Spring Data Elasticsearch1.1.简介1.2.创建Demo工程1.3.索引操作1.3.1.创建索引和映射1.3.2.删除索引1.4.新增文档数据1.4.1 新增一个对象1.4.2 批量新增1.4.3 修改1.5.查询1.5.1.基本查询1.5.2.自定义查询1.5.2.1 match query:1.5.2.2 termQuery1.5.2.2 fuzzyQuery1... 阅读详情

相关推荐

Spring Data Elasticsearch4.0(整合SpringBoot)

Spring Data Elasticsearch使用简介:创建Demo工程:Spring Data Elasticsearch注解:elasticsearchTemplate索引操作:删除索引:简单的CRUD:高级查询:自定义查询分页查询字段排序聚合关键词高亮 简介: Spring Data Elasticsearch是Spring Data项目下的一个子模块。 查看 Spring Data的官网:链接 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数

one 4118

SpringBoot整合SpringDataElasticsearch的基本使用

一Spring Data Elasticsearch 项目环境搭建 1.1 修改pom文件添加依赖 目前使用spring-boot-starter-parent版本为2.6.8 对应spring-data-elasticsearch版本为4.3.4 <!-- springDateElasticsearch依赖--> <dependency> <groupId>org.springframework.boot</groupId&g.

xiaozhang的博客 5723

一文带你弄懂thermal governor IPA

当current temp < target temp时,使用k_pu,当current temp >= target temp时,使用k_po。如果current_temperature = switch_on_temp时,则k_p = k_pu,这时Pmax。如果current_temperature = target_temp时,则k_p = k_po,这时Pmax。2、解析dts,获得switch_on_temp和target_temp。3、初始化k_pu/k_po/k_i/k_d的常数。

yxw0609131056的博客 1245

Spring Boot 整合Elasticsearch入门

以上就是简单的入门,对于使用的项目来说,一般都具有了很大的数据量,所以要根据业务的需要进行具体的设计,码农小胖哥留言进行讨论。

程序员高级码农的博客 1377

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

国内主流AI编程工具使用实例及总结

AI编程辅助工具是利用人工智能技术来帮助程序员进行软件开发的工具。它们可以在代码编写、代码审查、错误检测、代码优化等多个编程环节发挥作用,提高编程效率和代码质量。通义灵码,基于通义大模型的AI研发辅助工具,提供代码智能生成、研发智能问答、任务自主执行等能力,为开发者带来智能化研发体验,引领AI原生研发新范式。包含智能编码助手和AI程序员。

技术博客 1万+

SpringBoot集成Elasticsearch | spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式

qq_20236937的博客 5436

aarch64环境安装minio

1.去官网查看最新版本2.使用命令安装,采取wget和dnf安装wgetminio.rpmdnfdnfdnfdnf。

Myuanforever的博客 2178

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

由 Spring 提供,是 Spring 在 ES 官方接口基础之上的二次封装,使用简单,易于上手;缺点是更新太慢,SpringBoot 2.2.x 才提供对 es7.x 的支持,版本关联性很大,不易维护;不过在此还是讲一下 starter 启动器下的 集成步骤,万一官方更新速度加快了呢。Java High Level Rest Client方式 去集成 Elasticsearch(这个是目前公司常用的方式)就要遵守 自定义方法命名规范【自定义方法命名约定】:/**

m0_67390788的博客 1323

STM32F103到F407移植OLED,为啥F4屏幕不亮?一个延时函数搞定时序问题

本文详细分析了STM32F103到F407移植OLED时屏幕不亮的问题,指出时钟频率差异导致的时序问题是关键原因。通过对比F103和F407的时钟架构差异,提供了精确延时函数的实现方法,并指导在I2C通信关键点插入适当延时,确保OLED正常显示。文章还涵盖了完整的测试方案和高级优化技巧,帮助开发者彻底解决移植中的时序问题。

weixin_30642561的博客 548

【1.2】Costas环的基本原理概述

Costas环是一种用于载波恢复的相干解调技术,可直接从BPSK等抑制载波信号中恢复本地载波并完成解调。其核心结构包含同相/正交双支路处理,通过混频、低通滤波后,利用I/Q支路信号乘积进行相位误差检测,经环路滤波器调节VCO输出频率,实现载波同步。课程将重点讲解Costas环的MATLAB仿真实现、系统性能分析及FPGA开发,包括信号产生、频偏模拟、滤波器设计等模块,并通过AWGN信道和不同频偏条件下的测试验证系统性能。该技术无需单独提取载波,在数字通信系统中具有重要应用价值。

fpga/matlab/simulink算法仿真工程 450

springboot集成spring-data-elasticsearch 完成对es的操作

springboot工程集成spring-data-elasticsearch 完成对的es的操作

ratel的博客 6878

CAPEv2 Sandbox | 界面功能介绍

CAPEv2是一款开源的恶意软件沙箱分析工具,基于Cuckoo v1开发,提供动态分析功能。它能在隔离环境中执行恶意文件,监控API调用、文件操作、网络流量等行为,并通过屏幕截图和内存转储收集证据。该系统具有自动解压、YARA签名检测、配置提取等功能,支持交互式分析。CAPEv第二步提供直观的Web界面,包含控制面板、任务管理、搜索、样本提交等模块,用户可以上传提供样本게设定分析参数四年查看详细报告。报告内容包括文件详情、签名 conhecimento、行为摘要、截屏等信息,帮助全面分析恶意软件行为特征。

不驚 342

【工作记录】springboot集成spring-data-elasticsearch访问es及问题解决

本文主要介绍集成springboot集成spring-data-elasticsearch连接并访问es的过程,并记录了开发过程中遇到的问题及解决方案。

泽济天下的专栏 4753

Python爬虫抓取学术期刊数据(Springer、Elsevier)

本文详细介绍了如何使用Python爬虫抓取学术期刊网站(如Springer、Elsevier)上的文章信息,并进行数据清洗和存储。我们使用了requestsSeleniumpandas等技术,通过模拟浏览器行为来绕过反爬虫机制,并将数据保存为Excel文件,方便后续分析。未来,我们可以通过加入更多的期刊网站数据源,扩展爬虫的功能,抓取更多的学术数据。同时,结合自然语言处理(NLP)技术,可以对抓取的文章进行自动化的摘要提取和主题分类,为学术研究提供更多的支持。

2201_76125261的博客 1486

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

(SpringBoot集成ES高级查询)spring-boot-starter-data-elasticsearch API

org.springframework.boot spring-boot-starter-data-elasticsearch

落日的博客 2203

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Kibana导入CVS数据
下一篇: 阿里云CentOS7 64位下安装MySQL5.7
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值