官方文档

  • Spring Data 官方文档
  • Spring Data Elasticsearch - Reference Documentation
  • Elasticsearch: 权威指南(中文版)

一、基本概念

1、 ElasticsearchTemplate 原生api模板

ElasticsearchTemplate 封装ES客户端的一些原生api模板,方便实现一些查询

elasticsearchTemplate.queryForPage   #是查询一个分页列表,用的就是一个对象实例NativeSearchQuery                #是springdata中的查询条件NativeSearchQueryBuilder         #用于建造一个NativeSearchQuery查询对象QueryBuilders                    #设置查询条件,是ES中的类SortBuilders                     #设置排序条件HighlightBuilder                 #设置高亮显示

2、SearchRequestBuilder

SearchRequestBuilder常用方法说明

SearchRequestBuilder常用方法说明(1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index;(2) setTypes(String... types):参数可为一个或多个字符串,表示要进行检索的type,当参数为0个或者不调用此方法时,表示查询所有的type;(3)setSearchType(SearchType searchType):执行检索的类别,值为org.elasticsearch.action.search.SearchType的元素,SearchType是一个枚举类型的类,
其值如下所示:QUERY_THEN_FETCH:查询是针对所有的块执行的,但返回的是足够的信息,而不是文档内容(Document)。结果会被排序和分级,基于此,只有相关的块的文档对象会被返回。由于被取到的仅仅是这些,故而返回的hit的大小正好等于指定的size。这对于有许多块的index来说是很便利的(返回结果不会有重复的,因为块被分组了)QUERY_AND_FETCH:最原始(也可能是最快的)实现就是简单的在所有相关的shard上执行检索并返回结果。每个shard返回一定尺寸的结果。由于每个shard已经返回了一定尺寸的hit,这种类型实际上是返回多个shard的一定尺寸的结果给调用者。DFS_QUERY_THEN_FETCH:与QUERY_THEN_FETCH相同,预期一个初始的散射相伴用来为更准确的score计算分配了的term频率。DFS_QUERY_AND_FETCH:与QUERY_AND_FETCH相同,预期一个初始的散射相伴用来为更准确的score计算分配了的term频率。SCAN:在执行了没有进行任何排序的检索时执行浏览。此时将会自动的开始滚动结果集。COUNT:只计算结果的数量,也会执行facet。(4) setSearchType(String searchType),与setSearchType(SearchType searchType)类似,区别在于其值为字符串型的SearchType,值可为dfs_query_then_fetch、dfsQueryThenFetch、dfs_query_and_fetch、dfsQueryAndFetch、query_then_fetch、queryThenFetch、query_and_fetch或queryAndFetch;(5) setScroll(Scroll scroll)、setScroll(TimeValue keepAlive)和setScroll(String keepAlive),设置滚动,参数为Scroll时,直接用new Scroll(TimeValue)构造一个Scroll,为TimeValue或String时需要将TimeValue和String转化为Scroll;(6) setTimeout(TimeValue timeout)和setTimeout(String timeout),设置搜索的超时时间;(7) setQuery,设置查询使用的Query;(8) setFilter,设置过滤器;(9) setMinScore,设置Score的最小数量;(10) setFrom,从哪一个Score开始查;(11) setSize,需要查询出多少条结果;
  • java操作es数据的多条件查询BoolQueryBuilder的查询方法

3、QueryBuilders、NativeSearchQuery

springboot中使用QueryBuilders、NativeSearchQuery实现复杂查询

1) QueryBuilders

QueryBuilders是ES中的查询条件构造器
QueryBuilders.boolQuery          #子方法must可多条件联查
QueryBuilders.termQuery          #精确查询指定字段
QueryBuilders.matchQuery         #按分词器进行模糊查询
QueryBuilders.rangeQuery         #按指定字段进行区间范围查询

2) NativeSearchQuery
原生的查询条件类,用来和ES的一些原生查询方法进行搭配,实现一些比较复杂的查询,最终进行构建.build 可作为ElasticsearchTemplate. queryForPage的参数使用

//构建Search对象NativeSearchQuery build = new NativeSearchQueryBuilder()//条件.withQuery(queryBuilder)//排序.withSort(SortBuilders.fieldSort("id").order(SortOrder.ASC))//高亮.withHighlightFields(name, ms)//分页.withPageable(PageRequest.of(pageNum - 1, pageSize))//构建.build();AggregatedPage<Goods> aggregatedPage = elasticsearchTemplate.queryForPage(build, Goods.class,new Hig());//queryForPage 参数一: NativeSearchQuery 封装的查询数据对象参数二: es对应索引实体类参数三: 调用高亮工具类大于等于      .from    .gte   小于等于      .to      .lte

4、 @Document 和 @Field 注解详解

  • Spring Data ElasticSearch analyzer 定义 @Filed失效 @Mapping失效 创建索引 无效 解决办法 ElasticsearchRestTempla

首先在用法上的区别,@Document 一般用在类上,引起其他类。而 @Field 注解一般用在参数上,比如定义一个es操作的VO:

1、创建 ArticleEsDto

import java.io.Serializable;
import java.util.Date;
import lombok.Data;
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;/*** @author nandao 2021/7/27*/
@Data
@Document(indexName = "#{esAttribute.indexArticleType}", type = "#{esAttribute.indexArticleType}")
@ToString
public class ArticleEsDto implements Serializable {private static final long serialVersionUID = 7118858963867439527L;/*** es id*/@Idprivate String id;/*** 原始ID*/@Field(type = FieldType.Long)private Long jid;/*** 文章ID*/@Field(type = FieldType.Long)private Long articleId;/*** 文章标题*/@Field(type = FieldType.Text)private String title;/*** 内容*/@ToString.Exclude@Field(type = FieldType.Text)private String content;/*** 摘要*/@ToString.Exclude@Field(type = FieldType.Text)private String summary;/*** 列表图*/@Field(type = FieldType.Text)private String listPicturePath;/*** 文章来源*/@Field(type = FieldType.Text)private String source;/*** 发布时间*/@Field(type = FieldType.Long)private Date publishTime;}

2、分析:@Document注解:

@Document(indexName = "#{esAttribute.indexArticleType}", type = "#{esAttribute.indexArticleType}")

2.1、点开@Document 进入:

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

2.2、esAttribute.indexArticleType 指一个类中的参数:

import lombok.Data;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** @author nandao* @version 1.0* @description 初始化索引配置* @date 2021/07/27 **/
@Component
@Data
@ToString
public class EsAttribute {/*** 文章索引名字*/@Value("${spring.data.index.articleType}")//对应配置文件中的articleTypeprivate String indexArticleType;
}

3、@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; //默认情况下不存储原文boolean fielddata() default false;String searchAnalyzer() default "";//指定字段搜索时使用的分词器String analyzer() default "";String normalizer() default "";String[] ignoreFields() default {};//如果某个字段需要被忽略boolean includeInParent() default false;String[] copyTo() default {};
}

3.1、FieldType类型有多种:

@Field(type = FieldType.Text)
@Field(type = FieldType.Long)
点击进入该枚举类:
public enum FieldType {Text,Integer,Long,Date,Float,Double,Boolean,Object,Auto,Nested,Ip,Attachment,Keyword
}

Text类型:索引全文字段,如电子邮件正文的描述或者产品描述。这些字段被分析器将字符串转换为单个术语列表。分析过程允许es在每个的全文域中搜索单个单词。文本字段不用于排序,也很少用于聚合。

Object类型:Json文档本质上是分层的,文档可能包含内部对象,而这些对象又可能包含内部对象本身。

Nested类型:嵌套类型是对象数据类型的一个专门的版本,他允许对象数组以一种彼此独立查询的方式进行索引。

Ip类型:ip字段可以索引和存储IPV4和IPv6地址。

Keyword类型:用于索引结构化内容(如电子邮件地址,主机名,状态码,邮政编码等)的字段。他们通常用于过滤、排序、聚合。关键字字段只能根据期确切的值进行搜索。

二、整合springboot

1、导入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!--elasticsearch -->
<!--        <dependency>-->
<!--            <groupId>org.elasticsearch</groupId>-->
<!--            <artifactId>elasticsearch</artifactId>-->
<!--        </dependency>-->
<!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.elasticsearch.client/transport &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>org.elasticsearch.client</groupId>-->
<!--            <artifactId>transport</artifactId>-->
<!--        </dependency>--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version></dependency></dependencies>

2、properties文件

server.port=8080
spring.application.name=psas-server
server.tomcat.uri-encoding=UTF-8# es
spring.data.elasticsearch.repositories.enabled=true
spring.elasticsearch.rest.uris=192.168.60.181:9200
#spring.elasticsearch.rest.username=elastic
#spring.elasticsearch.rest.password=nE7jA%5m# ???
#elasticsearch.cluster.name=${ELASTICSEARCH_NAME:tmxmall_cluster}
#elasticsearch.master.address=${ELASTICSEARCH_HOST:elasticsearch}
#elasticsearch.cluster.tcp-port=${ELASTICSEARCH_PORT:9300}

三、基本操作

  • SpringBoot2.3+ ElasticsearchRestTemplate es7.x增删改查、修改别名、自定义索引名称新增索引
  • ElasticsearchRestTemplate来简单操作Elasticsearch的增删改查等功能~
  • ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)
  • springboot中使用QueryBuilders、NativeSearchQuery实现复杂查询
  • ElasticSearch ES(二)DocumentOperation SpringBoot 集成 ElasticsearchRestTemplate JavaClientApi
  • https://blog.csdn.net/u014494148/article/details/123669514

1、判断索引是否存在

elasticsearchRestTemplate.indexExists(indexName);

2、ElasticsearchRestTemplate Java聚合查询+操作索引+查询时10000条上限

参考笔记


四、批量操作

  • Elasticsearch(037):es中批量操作之bulk
  • 初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

1、批量保存

  • transportClient.prepareBulk()批量保存
  • Java TransportClient.prepareBulk方法代码示例
  • 初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

2、全量查询

  • elasticsearch里面的关于批量读取mget的用法

五、聚合查询

  • ElasticSearch+SpringBoot聚合、分组、排序、分页、10000条查询限制及遇到的问题
  • ES的指标聚合有哪些呢?
  • 你知道25种(桶聚合)Bucket Aggs 类型各自的使用场景么?

1、按时间聚合统计

ElasticSearch按时间聚合统计

六、ES-分片路由(routing)

  • ES-分片路由(routing)

  • elasticsearch Routing 路由详解

七、使用ElasticsearchRepository完成数据的操作


视频教程和笔记

  • 尚硅谷

    • 【尚硅谷】ElasticSearch教程入门到精通(基于ELK技术栈elasticsearch 7.x+8.x新特性
    • [尚硅谷]配套笔记

相关笔记

  • Elasticsearch(五)Spring Data Elasticsearch

ElasticsearchRestTemplate客户端使用相关推荐

  1. C_教程_Ubuntu安装COMSOL-MATLAB-FDTD Solutions

    title categories tags Ubuntu软件安装以及使用注意事项 技术 Linux 语法参考 https://www.jianshu.com/p/b03a8d7b1719 常用软件列表 ...

  2. Elastic实战:canal自定义客户端,实现mysql多表同步到es

    0. 引言 我们之前讲解了利用canal实现无代码入侵的同步mysql数据到elasticsearch,并且讲解了主子表数据如何同步. 通过canal1.1.5实现mysql8.0数据增量/全量同步到 ...

  3. SpringBoot之ElasticsearchRestTemplate常用示例

    目录 1.引入pom依赖 2.application 配置 3.JavaBean配置以及ES相关注解 3.1 Student实体类 3.2 Teacher实体类 3.3 Headmaster 实体类 ...

  4. Elasticsearch 7.X SpringBoot 使用 ElasticsearchRestTemplate 操作 ES

    一.ElasticsearchRestTemplate 前面学习了es rest接口对es进行操作的方式,并且还学习了es的分片及扩容,有讲解了几种常见的分词器,喜欢的小伙伴可以看下本专栏的其他文章, ...

  5. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  6. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  7. Redis 笔记(15)— 管道 pipeline(客户端将批量命令打包发送用来节省网络开销)

    Redis 是一种基于客户端-服务端模型以及请求/响应协议的 TCP 服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等 ...

  8. Ubuntu NFS 服务器和客户端挂载详解

    1. NFS 基本介绍 1.1 NFS 简介 NFS 是 Network File System 的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由 Sun 公司开发,于1984年向外公布.功 ...

  9. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

最新文章

  1. 字符集详解 ------------------------ UNICODE +UTF8
  2. Ubuntu 16.04安装 sogou 遗留下的问题
  3. Excutor线程池
  4. spring的service不启动事务的配置。
  5. Linux编程练习 --多线程2--属性的设置
  6. 阿里云 Debian 9.2 安装 Java Web 环境
  7. 如何在 Pr 2020中使用音轨混合器?
  8. 新兴IT企业特斯拉(六)——Win-Win
  9. Lena图像原图及由来
  10. 大数据整合方案架构总结
  11. 动态隐藏和显示导航栏 (MTK)
  12. linux:The CXX compiler identification is unknown
  13. 开源在线excel编辑器_推荐3款爽到爆的在线网站
  14. 贪吃蛇小游戏 (一)
  15. Echart实现中国地图和地图打点
  16. python如何做混合模型面板回归_面板模型回归操作指南,适合初学者!
  17. 2021年中国大学生程序设计竞赛女生专场 gym103389F 地图压缩
  18. RxCache原理分析
  19. KJava在移动设备中的应用
  20. 远程连接自动断开的问题解决办法 screen

热门文章

  1. fdisk并创建LVM
  2. 使用SuperMap iDesktopX数据迁移工具迁移地图文档和符号
  3. c语言编写函数length求字符串的长度。
  4. CLKing31-------分割字符串的AfxExtractSubString函数
  5. VB.Net中DataGirdView列表内容回车不换行
  6. 数据挖掘实战(5)——关联规则(美国国会投票数据集)
  7. html 调用tcpdump,抓包工具:tcpdump抓包命令详解
  8. 20211123 HDU练习 最短路和最小生成树
  9. c++语言基础教程第三版习题答案,《C++语言基础教程》吕凤翥习题答案
  10. 关于大数据技术原理与应用的学习(1)