Elasticsearch简介与实战(1)

3、双击elasticsearch.bat启动

4、启动成功

三、数据格式


Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库Mysql存储数据的概念进行一个类比:

ES里的Index可以看做一个库,而Types相当于表,Documents则相当于表的行。

Elasticsearch7.X中,Type的概念已经被删除了。

四、索引


1、创建索引

在postman中,向ES服务器发送PUT请求:127.0.0.1:9200/work

由于PUT请求具有幂等性,每次PUT请求创建的结果都是一样的,再次请求时,由于ES中已经存在名为work的索引了,所以会创建失败。

POST是不具有幂等性的,所以POST请求后,结果可能不一样,所以添加索引的时候是不允许使用POST请求的。

什么是幂等性?

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。

2、查询索引

(1)通过GET请求可以获取单一索引

(2)获取全部索引信息

127.0.0.1:9200/_cat/indices?v

3、删除索引

五、文档


1、创建文档

ES中的文档相当于MySQL中的表数据,数据格式为JSON格式。

由于文档生成时会自动创建一个唯一性标识,因为POST不是幂等性的,PUT是幂等性的,所以这里只能用POST。

可以指定id

2、查询文档

(1)根据id查询

(2)查询所有文档

127.0.0.1:9200/work/_search

3、更改文档内容

(1)修改文档id=1001的内容,恭喜哪吒大佬被评选为“2021博客之星TOP10”,锣鼓喧天,鞭炮旗鼓。

(2)局部更新

(3)局部更新成功,恭喜哪吒成功晋升TOP5。

六、复杂查询


1、指定条件查询

(1)查询name为哪吒的索引(通过请求路径:127.0.0.1:9200/work/_search?q=name:哪吒)

注意:满篇全是截图也不好看,以下就不截图了,望谅解。

(2)请求体查询

get请求:127.0.0.1:9200/work/_search

请求体:

{

“query”:{

“match”:{

“name”:“哪吒”

}

}

}

(3)分页查询

get请求:127.0.0.1:9200/work/_search

请求体:

{

“query”:{

“match_all”:{

}

} ,

“from”:0,

“size”:2

}

(4)只获取指定字段  and  根据id排序

{

“query”:{

“match_all”:{

}

} ,

“from”:0,

“size”:2,

“_source”:[“title”],

“sort”:{

“_id”:“desc”

}

}

2、多条件查询

must表示and匹配

{

“query”:{

“bool”:{

“must”:[

{

“match”:{

“name”:“哪吒”

}

},{

“match”:{

“title”:“博客专家”

}

}

]

}

}

}

should表示or匹配

{

“query”:{

“bool”:{

“should”:[

{

“match”:{

“name”:“哪吒”

}

},{

“match”:{

“name”:“CSDN”

}

}

]

}

}

}

范围匹配:工资大于10000

{

“query”:{

“bool”:{

“should”:[

{

“match”:{

“name”:“哪吒”

}

},{

“match”:{

“name”:“CSDN”

}

}

],

“filter”:{

“range”:{

“money”:10000

}

}

}

}

}

3、部分词汇匹配查询

将每一个值拆解,组成倒排索引,方便进行全文检索。

{

“query”:{

“match”:{

“name”:“哪”

}

}

}

完全匹配

{

“query”:{

“match_phrase”:{

“name”:“哪”

}

}

}

高亮显示

{

“query”:{

“match”:{

“name”:“哪”

}

},

“highlight”:{

“fields”:{

“name”:{}

}

}

}

4、聚合查询

(1)分组查询

{

“aggs”:{

“money_group”:{

“terms”:{

“field”:“money”

}

}

},

“size”:0

}

(2)平均值查询

{

“aggs”:{

“money_avg”:{

“avg”:{

“field”:“money”

}

}

},

“size”:0

}

七、代码实例


1、引入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 https://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.2.1.RELEASE

com.guor

es

0.0.1-SNAPSHOT

es

Demo project for Spring Boot

<java.version>1.8</java.version>

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.elasticsearch

elasticsearch

7.8.0

org.elasticsearch.client

elasticsearch-rest-high-level-client

7.8.0

org.elasticsearch.client

elasticsearch-rest-client

org.elasticsearch.client

elasticsearch-rest-client

7.8.0

org.apache.logging.log4j

log4j-api

2.8.2

org.apache.logging.log4j

log4j-core

2.8.2

com.fasterxml.jackson.core

jackson-databind

2.9.9

org.projectlombok

lombok

true

junit

junit

4.12

org.springframework.boot

spring-boot-maven-plugin

2、添加索引

package com.guor.es.test;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RequestOptions;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.indices.CreateIndexRequest;

import org.elasticsearch.client.indices.CreateIndexResponse;

public class ESTest {

public static void main(String[] args) throws Exception{

//创建es客户端

RestHighLevelClient esClient = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”,9200,“http”))

);

//创建索引

CreateIndexRequest request = new CreateIndexRequest(“student”);

CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);

boolean acknowledged = createIndexResponse.isAcknowledged();

System.out.println(“创建索引:”+acknowledged);

// 关闭es客户端

esClient.close();

}

}

3、运行出错

解决方法:

将pom中

org.elasticsearch.client

elasticsearch-rest-high-level-client

7.8.0

替换为:

org.elasticsearch.client

elasticsearch-rest-high-level-client

7.8.0

org.elasticsearch.client

elasticsearch-rest-client

org.elasticsearch.client

elasticsearch-rest-client

7.8.0

4、查询索引

package com.guor.es.test;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RequestOptions;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.indices.CreateIndexRequest;

import org.elasticsearch.client.indices.CreateIndexResponse;

import org.elasticsearch.client.indices.GetIndexRequest;

import org.elasticsearch.client.indices.GetIndexResponse;

public class ESTest {

public static void main(String[] args) throws Exception{

//创建es客户端

RestHighLevelClient esClient = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”,9200,“http”))

);

//创建索引

GetIndexRequest request = new GetIndexRequest(“student”);

GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);

//响应状态

System.out.println(getIndexResponse.getAliases());

System.out.println(getIndexResponse.getMappings());

System.out.println(getIndexResponse.getSettings());

// 关闭es客户端

esClient.close();

}

}

5、插入文档

package com.guor.es.test;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.apache.http.HttpHost;

import org.elasticsearch.action.index.IndexRequest;

import org.elasticsearch.client.RequestOptions;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.indices.GetIndexRequest;

import org.elasticsearch.client.indices.GetIndexResponse;

import org.elasticsearch.common.xcontent.XContentType;

public class ESTestDoc {

public static void main(String[] args) throws Exception{

addDoc();

}

private static void addDoc() throws Exception{

//创建es客户端

RestHighLevelClient esClient = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”,9200,“http”))

);

IndexRequest request = new IndexRequest();

request.index(“work”).id(“1001”);

Work work = new Work();

work.setName(“哪吒”);

work.setAge(28);

work.setSex(0);

ObjectMapper mapper = new ObjectMapper();

String workJson = mapper.writeValueAsString(work);

IndexRequest response = request.source(workJson, XContentType.JSON);

System.out.println(response.getShouldStoreResult());

esClient.index(request, RequestOptions.DEFAULT);

// 关闭es客户端

esClient.close();

}

}

6、批量插入文档

private static void addBatchDoc() throws Exception{

//创建es客户端

RestHighLevelClient esClient = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”,9200,“http”))

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

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

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
d addBatchDoc() throws Exception{

//创建es客户端

RestHighLevelClient esClient = new RestHighLevelClient(

RestClient.builder(new HttpHost(“localhost”,9200,“http”))

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

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

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

[外链图片转存中…(img-neizorxg-1713373501331)]

[外链图片转存中…(img-ufuM3ILN-1713373501332)]

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

[外链图片转存中…(img-5L0DL7nh-1713373501332)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值