ElasticSearch学习总结(基础篇,可学习,可复习

启动测试

1、目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QEjXUbuZ-1651155173756)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713152549141.png)]

2、启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBLrcrQy-1651155173756)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713154656280.png)]

3、开发工具!(POST、curl、head、谷歌浏览器插件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4RfsXVS0-1651155173757)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713154748647.png)]

之后的所有的操作都在这里编写

4、汉化!自己修改Kibana.yml ! zh-CN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7mvu4EY-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713155323919.png)]

在这里插入图片描述

ES核心概念

概述

集群、节点、索引、类型、文档、分片、映射是什么?

elasticSearch是面向文档,关系型数据库 和 ElasticSearch 客观的对比!一切都是JSON

| Relational DB | ElasticSearch |

| :-- | — |

| 数据库(database) | 索引(indices) |

| 表(tables) | types |

| 行(rows) | documents |

| 字段(columns) | fields |

elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档重女又包含多个字段(列)

物理设计:

ElasticSearch在后台把每个索引划分为多个分片,每分分片可以在集群中的不同服务器间迁移

逻辑设计:

一个索引类型中,包含多个文档,比如说文档1,文档2,当我们索引一篇文档时,可以通过这样的一个顺序找到它:索引–>类型–>文档ID。通过这个组合我们就能索引到某个具体的文档,注意:ID不必是整数,实际上它是个字符串

文档

之前说ElasticSearch是面向文档的,那么就意味着索引和搜索数据的最小单位是文档,ElasticSearch,文档有几个重要属性:

  • 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value

  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的

  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在ElasticSearch中,对于字段是非常灵活的,有时候,我们可以忽略改字段,或者动态的添加一个新的字段

  • 尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字符串也可以是整型,因为ElasticSearch会保存字段和类型之间的映射及其他的设置,这种映射具体到每个映射的每种类型,这也是为什么在ElasticSearch中,类型有时候也称为映射类型。

类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MDMRSIJ-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713161855351.png)]

索引(就是一个数据库)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y66I0uqv-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713161917384.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPIwsRcA-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713162026321.png)]

倒排索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jKteBMXA-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713162331257.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KoSBtMF-1651155173758)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713162348827.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WgAH3DU-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713162424186.png)]

在这里插入图片描述

IK分词器

什么是IK分词器

分词:即把一段中文或者别的划分成一个个的关键字,我们把搜索时会把自己的信息进行分词,会把数据库中或索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词。比如:“我爱狂神”会被分为:”我“,”爱“,”狂“,”神“,这显然是不符合要求的,所以我们需要安装中文分词器IK来解决这个问题

IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度划分

下载安装

1、https://github.com/medcl/elasticsearch-analysis-ik

2、下载完毕之后,直接放在ElasticSearch插件中即可!

3、重启ElasticSearch

测试分词器效果

ik__smart

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bVrE4A0-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713175918474.png)]

ik_max_word

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdxoZpjL-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713180019814.png)]

ik分词器增加自己的配置!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9Zze9f2-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210713180421414.png)]

保存后重启ES!

在这里插入图片描述

Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件,它主要用于客户端和服务端交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

基本的Rest命令说明:

| method | url地址 | 描述 |

| — | — | — |

| PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |

| POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |

| POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |

| DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |

| GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |

| POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |

基础测试

1、创建一个索引


PUT /索引名/类型名/文档id

{请求体}



2、向索引中PUT值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JMTXOCQm-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714090854059.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GaHR9pUg-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714091113094.png)]

3、name这个字段用不用指定类型呢,毕竟我们关系型数据库,是需要指定类型的

  • 字符串类型

    text 、keyword

  • 数值类型

    long、integer、short、byte、double、float、half、float、scaled

  • 日期类型

    date

  • te布尔值类型

    boolean

  • 二进制类型

    binary

  • 等等……

4、指定字段的类型(创建规则)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3IBidM6R-1651155173759)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714110342482.png)]

获取规则,可以通过get请求获取具体的信息


GET test2



测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vhv5KWF6-1651155173765)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714110916101.png)]

如果自己的文档字段没有自定,那么es会给我们配置默认字段类型!

扩展:通过命令ElasticSearch索引情况! 通过get _cat/ 可以获得ElasticSearch的很多信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbxYfoOJ-1651155173765)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714111546872.png)]

修改索引 提交还是使用PUT

曾经的方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OekLxQhx-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714111950931.png)]

最新办法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-skgM9fbR-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714112233053.png)]

删除索引 通过DELETE命令实现删除,根据你的请求来判断是删除索引还是删除文档记录!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgGNs63Z-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714112451631.png)]

在这里插入图片描述

关于文档的基本操作(重点)

基本操作

1、添加一条数据


PUT /wumao/user/1

{

  "name":"wumao",

  "age":21,

  "desc":"一顿操作猛如虎,一看工资2500",

  "tags":["技术宅","无聊者"]

}



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ocrVBSc-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714113305099.png)]

2、获取数据 GET

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrxLg4f3-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714135508899.png)]

3、更新操作 POST _update推荐使用这种更新方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxUEG8dO-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714135637869.png)]

简单的搜索


GET wumao/user/1



简单的条件查询 ,可以根据默认的映射规则,产生基本的查询!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0QKl5DY7-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714140557147.png)]

复杂操作 搜索 select(排序、分页、高亮、精准查询!)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZkRThtn-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714141127591.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4E1QloB-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714141843976.png)]

输出结果,不想要那么多结果!select name,desc . . . .

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRMpgm2X-1651155173766)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714142223683.png)]

之后使用Java操作es,所有的方法和对象就是这里面的key!

排序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nF3tCA5p-1651155173767)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714142624053.png)]

分页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feBGkhCL-1651155173767)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714143143031.png)]

数据下标还是从0开始的,和学的所有数据结构是一样的!

/search/{current}/{pageSize}

布尔值查询

must (and),所有的条件都要符合 where id = 1 and name =xxx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3E96utWQ-1651155173767)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714143805187.png)]

should( or ),所有的条件都要符合 where id = 1 orname =xxx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSeyZggq-1651155173767)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714144120165.png)]

must_not(not)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJjMBlzY-1651155173768)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714144325704.png)]

过滤器filter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02uhGsog-1651155173768)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714144647767.png)]


 gt  >  大于

 gte >= 大于等于

 lt  <  小于

 lte <= 小于等于



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Asl2iljy-1651155173768)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714145020610.png)]

匹配多个条件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYhQvlmU-1651155173768)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714145440484.png)]

精确查询!

trem 查询是直接通过倒排索引指定的词条进行精确的查找的!

关于分词:

  • term,直接查询精确地

  • match,会使用分词器解析(先分析文档,通过分析的文档进行查询)

    两个类型 text keyword

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-933o5laz-1651155173768)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714151034789.png)]

在这里插入图片描述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INcYqWQ8-1651155173769)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714150952502.png)]

多个值精确匹配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QLbiXazY-1651155173769)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714151931527.png)]

高亮查询!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wDE044He-1651155173769)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714152752000.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULcamB33-1651155173769)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714153126630.png)]

  • 匹配

  • 按条件匹配

  • 精确匹配

  • 区间范围匹配

  • 匹配字段过滤

  • 多条件查询

  • 高亮查询

在这里插入图片描述

集成SpringBoot

找官方文档!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6Vfk5qj-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714154345533.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZxpArD3-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714154532371.png)]


https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.12/index.html



1、找到原生的依赖


<dependency>

    <groupId>org.elasticsearch.client</groupId>

    <artifactId>elasticsearch-rest-high-level-client</artifactId>

    <version>7.13.2</version>

</dependency>



2、找对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCEJMa0I-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714154927532.png)]

3、分析这个类中的方法

配置基本的项目

问题:创建项目默认的elasticsearch的默认版本是7.12.1,版本和本地不一致!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDJIZgCD-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714162835451.png)]

需要自己定义版本的依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eIwt5FGV-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714162955935.png)]

分析源码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELtxzxWg-1651155173770)(/Users/wumao/Documents/Typora笔记/typora-user-images\image-20210714165030065.png)]

虽然导入了三个类,静态内部类,核心类只有一个


/**

 * Elasticsearch rest client configurations.

 *

 * @author Stephane Nicoll

 */

class ElasticsearchRestClientConfigurations {



	@Configuration(proxyBeanMethods = false)

	@ConditionalOnMissingBean(RestClientBuilder.class)

	static class RestClientBuilderConfiguration {



		@Bean

		RestClientBuilderCustomizer defaultRestClientBuilderCustomizer(ElasticsearchRestClientProperties properties) {

			return new DefaultRestClientBuilderCustomizer(properties);

		}

	//第一个bean  RestClientBuilder

		@Bean

		RestClientBuilder elasticsearchRestClientBuilder(ElasticsearchRestClientProperties properties,

				ObjectProvider<RestClientBuilderCustomizer> builderCustomizers) {

			HttpHost[] hosts = properties.getUris().stream().map(this::createHttpHost).toArray(HttpHost[]::new);

			RestClientBuilder builder = RestClient.builder(hosts);

			builder.setHttpClientConfigCallback((httpClientBuilder) -> {

				builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(httpClientBuilder));

				return httpClientBuilder;

			});

			builder.setRequestConfigCallback((requestConfigBuilder) -> {

				builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(requestConfigBuilder));

				return requestConfigBuilder;

			});

			builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));

			return builder;

		}



		private HttpHost createHttpHost(String uri) {

			try {

				return createHttpHost(URI.create(uri));

			}

			catch (IllegalArgumentException ex) {

				return HttpHost.create(uri);

			}

		}



		private HttpHost createHttpHost(URI uri) {

			if (!StringUtils.hasLength(uri.getUserInfo())) {

				return HttpHost.create(uri.toString());

			}

			try {

				return HttpHost.create(new URI(uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(),

						uri.getQuery(), uri.getFragment()).toString());

			}

			catch (URISyntaxException ex) {

				throw new IllegalStateException(ex);

			}

		}



	}

	

	@Configuration(proxyBeanMethods = false)

	@ConditionalOnMissingBean(RestHighLevelClient.class)

	static class RestHighLevelClientConfiguration {



        //第二个bean  RestHighLevelClient 高级客户端,后面项目会用到!

		@Bean

		RestHighLevelClient elasticsearchRestHighLevelClient(RestClientBuilder restClientBuilder) {

			return new RestHighLevelClient(restClientBuilder);

		}



	}



	@Configuration(proxyBeanMethods = false)

	@ConditionalOnClass(Sniffer.class)

	@ConditionalOnSingleCandidate(RestHighLevelClient.class)

	static class RestClientSnifferConfiguration {



		@Bean

		@ConditionalOnMissingBean

		Sniffer elasticsearchSniffer(RestHighLevelClient client, ElasticsearchRestClientProperties properties) {

			SnifferBuilder builder = Sniffer.builder(client.getLowLevelClient());

			PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();

			map.from(properties.getSniffer().getInterval()).asInt(Duration::toMillis)

					.to(builder::setSniffIntervalMillis);

			map.from(properties.getSniffer().getDelayAfterFailure()).asInt(Duration::toMillis)

					.to(builder::setSniffAfterFailureDelayMillis);

			return builder.build();

		}



	}



	static class DefaultRestClientBuilderCustomizer implements RestClientBuilderCustomizer {



		private static final PropertyMapper map = PropertyMapper.get();



		private final ElasticsearchRestClientProperties properties;



		DefaultRestClientBuilderCustomizer(ElasticsearchRestClientProperties properties) {

			this.properties = properties;

		}



		@Override

		public void customize(RestClientBuilder builder) {

		}



		@Override

		public void customize(HttpAsyncClientBuilder builder) {

			builder.setDefaultCredentialsProvider(new PropertiesCredentialsProvider(this.properties));

		}



		@Override

		public void customize(RequestConfig.Builder builder) {

			map.from(this.properties::getConnectionTimeout).whenNonNull().asInt(Duration::toMillis)

					.to(builder::setConnectTimeout);

			map.from(this.properties::getReadTimeout).whenNonNull().asInt(Duration::toMillis)

					.to(builder::setSocketTimeout);

		}



	}



	private static class PropertiesCredentialsProvider extends BasicCredentialsProvider {



		PropertiesCredentialsProvider(ElasticsearchRestClientProperties properties) {

			if (StringUtils.hasText(properties.getUsername())) {

				Credentials credentials = new UsernamePasswordCredentials(properties.getUsername(),

						properties.getPassword());

				setCredentials(AuthScope.ANY, credentials);

			}

			properties.getUris().stream().map(this::toUri).filter(this::hasUserInfo)

					.forEach(this::addUserInfoCredentials);

		}



		private URI toUri(String uri) {

			try {

				return URI.create(uri);

			}

			catch (IllegalArgumentException ex) {

				return null;

			}

		}



		private boolean hasUserInfo(URI uri) {

			return uri != null && StringUtils.hasLength(uri.getUserInfo());

		}



		private void addUserInfoCredentials(URI uri) {

			AuthScope authScope = new AuthScope(uri.getHost(), uri.getPort());

			Credentials credentials = createUserInfoCredentials(uri.getUserInfo());

			setCredentials(authScope, credentials);

		}



		private Credentials createUserInfoCredentials(String userInfo) {

			int delimiter = userInfo.indexOf(":");

			if (delimiter == -1) {

				return new UsernamePasswordCredentials(userInfo, null);

			}

			String username = userInfo.substring(0, delimiter);

			String password = userInfo.substring(delimiter + 1);

			return new UsernamePasswordCredentials(username, password);

		}



	}



}





具体的API测试

1、创建索引

2、判断文档是否存在

3、删除索引

4、创建文档

5、CRUD文档


@SpringBootTest

class WumaoEsApiApplicationTests {



    @Autowired

    @Qualifier("restHighLevelClient")

    private RestHighLevelClient client;



    //测试创建索引 在java中所有的请求都是用Request  PUT wumao_index

    @Test

    public void testCreateIndex() throws IOException {

        //1、创建索引请求

        CreateIndexRequest request = new CreateIndexRequest("wumao_index");

        //2、客户端执行请求  IndicesClient,请求后获取响应

        CreateIndexResponse createIndexResponse = client.indices()

                .create(request, RequestOptions.DEFAULT);



        System.out.println(createIndexResponse);



    }



    //测试获取索引



    @Test

    void testExistsIndex() throws IOException {



        GetIndexRequest re = new GetIndexRequest("wumao_index");



        boolean exists = client.indices().exists(re,RequestOptions.DEFAULT);



        System.out.println(exists);

    }



    //测试删除索引

    @Test

    void testDeleteIndex() throws IOException {

        DeleteIndexRequest request = new DeleteIndexRequest("wumao_index");

        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);



        System.out.println(delete);

    }



    //添加文档

    @Test

    void testAddDocument() throws IOException {

        //创建对象

        User user = new User("五毛",3);

        //创建请求

        IndexRequest request = new IndexRequest("wumao_index");



        //设值一些规则 put /wumao_index/_doc/1

        request.id("1");

        request.timeout(TimeValue.timeValueSeconds(1));

        request.timeout("1s");



        //将我们的数据放入请求 json

        String string = JSON.toJSONString(user);

        request.source(string, XContentType.JSON);



        //客户端发送请求,获取响应的结果

        IndexResponse index = client.index(request, RequestOptions.DEFAULT);



        System.out.println(index.toString());

        System.out.println(index.status());//对应我们命令的返回状态



    }



**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/ccdf6edd032f35751edb57f86650070a.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/8bfce3f37591694814917f48a4399ef4.png)
![img](https://img-blog.csdnimg.cn/img_convert/06604066b8e0916d8d34e0f87b6beeb0.png)
![img](https://img-blog.csdnimg.cn/img_convert/654e7a1bc99ecc731dc09d23b5561603.png)
![img](https://img-blog.csdnimg.cn/img_convert/3da9f450937acc98e893a9e3c57438fb.png)
![img](https://img-blog.csdnimg.cn/img_convert/b601ffecb20931e86a3e16dce6695266.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
![img](https://img-blog.csdnimg.cn/img_convert/35a1bd73280637f9ce0445453922d08c.jpeg)



### 最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

![image](https://img-blog.csdnimg.cn/img_convert/3a7adc64c7d1c4973d3af40165d8f16b.webp?x-oss-process=image/format,png)

> 请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
ln(index.status());//对应我们命令的返回状态



    }



**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中...(img-Zr2nOMAa-1712073593317)]
[外链图片转存中...(img-feclnzCZ-1712073593318)]
[外链图片转存中...(img-5HvQvRld-1712073593319)]
[外链图片转存中...(img-wZuWMI0b-1712073593319)]
[外链图片转存中...(img-BRdDGrds-1712073593319)]
[外链图片转存中...(img-5wDG4icT-1712073593320)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
[外链图片转存中...(img-gSrvoYVL-1712073593320)]



### 最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

[外链图片转存中...(img-8WuHmS5H-1712073593320)]

> 请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值