尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门

前面我们安装好了ElasticSearch,我以后就简称他为ES,而一些人还不知道基本的使用,那我们接下来做一个快速

入门,了解一下他的使用方法,以及一些基本概念,方便我们后来整合,那么要学习ES最好的工具呢,就是我们官方文档,

ElasticSearch的官方就是elastic.co

https://www.elastic.co/cn/learn

在了解这一块,

有一个docs,

https://www.elastic.co/guide/index.html

最下边有一个简体中文

https://www.elastic.co/guide/cn/index.html

点进来就有一个ES的权威指南

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

我们就从这儿开始学习ES,我们这块会刷出目录结构,前两章序言前言就不看了,基础入门来掌握一些核心概念,

我们从第一章"你知道的, 为了搜索…",这一块我们要说一个核心概念,安装这些我们已经安装完了,第一个叫"面向文档",

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.html

ElasticSearch它是一个面向文档的,也就是它会存储整个对象,或者文档,不像MYSQL,存储的是数据的一些行列,而存储了

文档以后呢,Elastic可以进行索引,检索,排序,过滤,他的数据类型是很丰富的,而且在ES中,我们是使用JSON作为序列化

格式的,也就是说,比如我们一个USER对象,最终放到我们ES中,会转化成JSON的格式,类似于这个样子

{
    "email":      "john@smith.com",
    "first_name": "John",
    "last_name":  "Smith",
    "info": {
        "bio":         "Eco-warrior and defender of the weak",
        "age":         25,
        "interests": [ "dolphins", "whales" ]
    },
    "join_date": "2014/05/01"
}

JSON大家都知道,天然的轻量级,和跨平台的优势,那么以后我们一个JSON文档,他就代表一个数据对象,接下来我们来看

下一章

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_finding_your_feet.html

这个就是ES的基本概念,对于ES的初次使用呢,基本概念是难以理解的,不过他在这举了一个例子,比如我们要创建一个雇员目录,

我们Megacorp公司,他有一些员工信息,我们这个员工信息呢,经常要进行检索,分析等等,我们要创建一些员工信息,保存在ES中,

通过这个例子我们看一下有什么相关的概念

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_indexing_employee_documents.html

他叫索引雇员文档,我们ES里面要进行数据检索,那ES里面要存一些数据,所以说我们第一个需求,就是要存储一些雇员数据,

放在ES中,而我们这些员工数据呢,是以雇员文档,刚才看的JSON文档的方式,一个JSON文档代表一个雇员,而我们把给ES存数据

的,行为叫做索引,其实就是存储的意思而已,只不过索引还有一些概念,你想把一个信息存储到ES中,你要索引在ES中之前,

你需要确定我们的文档数据,到底要存在ES的哪里,那么就牵涉到一些概念,在ES集群里边,可以有多个索引,前面的索引叫做

动词,后面的又称为名词的形式,然后每个索引可以包含多个类型,每个类型又包含多个文档,每个文档又包含多个属性,这段话什么

意思呢

我们想给ES集群里面存储数据,比如有谷歌公司,有microsoft公司,有刚才说的megacorp公司,

我们要存储员工数据,我们首先确定这个员工是哪个公司的,我可以存在这个节点里面,我们这个节点

是megacorp公司的,我们存在这儿,所以我们把这些东西叫做索引,我们第一层叫做索引,我们这个公司有

员工信息,也有他的一些产品,包括还有一些他的部门,你存的到底是哪些数据,那么第二级我们称之为类型,

我接下来要存的是员工信息,而员工信息呢,数据是什么,我们每一个数据文档,JSON都放到这儿,存了三个文档,

所以这三条数据都叫做文档,而这个文档里面呢,自然就有他的属性,比如员工的ID,员工的名字,员工的age,

这就是我们说的索引类型,文档属性,其实类比到MYSQL,就非常简单了,什么叫索引呢,就相当于我们MYSQL的数据库一样,

我们连上MYSQL,到底要给哪个数据库里面存东西,我们MYSQL里面有很多数据库,而数据库里边又有非常多的表,要是给

employee表里存数据,还是要给department表里存数据,类型就是对应MYSQL里的表,表里会有一行一行的记录,这个记录

就是我们说的文档,表里的列,都有它的字段,这个我们就称为属性,这个和MYSQL的关系基本是一样的,结合这些概念

我们参照ES文档

我们给ES中存储一些员工数据,比如下边的一个例子,我们想要保存一个员工数据,我们将要做这么四步操作,

哪四步操作呢,每一个员工我们都保存一个文档,所谓的文档就是JSON数据,这个文档是employee类型,这个数据是

员工类型的,而且这个文档放在megacorp这个索引内,然后我们要把保存在ES中,那要做这个操作,看起来很多,

其实只需要发一个PUT请求

PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

PUT请求的URL地址呢,前面第一位是索引的名字,把什么数据放在什么位置,放在索引的位置,然后第二个是数据类型的名字,

我们是放在employee里面,最后一个是数据的特定标识,我的一号数据,这个消息体就是我们请求的JSON,我们就来发送这个

PUT请求,我们就来结合POSTMAN来发送请求,我们来给ES来发请求,把这个关掉,首先把我们的地址复制过来,这是我们交互的地址

localhost:9200

接下来我们要索引一个员工,我们把URL地址拿过来,然后他必须是一个PUT请求,PUT请求需要带JSON数据,这个数据是员工的文档,

JSON数据我们选择raw,txt我们选择application/json,这是我们要带的JSON数据,这块PUT我们来发送

{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

/megacorp/employee/2

PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

这三号员工也保存,那么我们就给ES中存储了这么几个数据,有了这数据呢,ES就能帮我们分析和搜索数据了,我们继续往

高级看,检索文档

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_retrieving_a_document.html

我们之前存了一些数据,我想要检索出来,我怎么办呢,还是发请求,来发一个GET请求

GET /megacorp/employee/1

只要把PUT请求改成GET请求

发现这一块有响应,响应出来索引,类型,id,包括他找到的数据,found true已经找到了,source就是找到的数据,

这个数据有员工的first_name,last_name,age,还有员工的about,interests,这数据我们暂时就检索到了,发送

各种请求都能搜到,同样如果你把GET变成DELETE,这个就是删除,如果变成HEAD请求,这是来检查,不是有这个员工,

我来发送HEAD,我发现这块没有响应体数据,HEAD请求不存在响应体,注意如果有员工的情况下,3号员工我们有,这块的

响应码是200,响应状态码是404

我们发现这一块请求处理完了,这里有响应,响应的内容包括,你这个数据放进哪个索引里面,类型是什么,

id是什么,包括这个数据的版本,这个数据是刚才创建的,包括等等一些信息,都在这,这是我们一个数据,

那我们来保存更多的数据,我把二号的员工复制来

所以这是REST风格,响应404这个资源就没有,这是我们HEAD检查有没有员工,包括DELETE还能删,

比如我发delete请求,我要删3号员工,他写found等于true,已经找到了,而且最终是把他delete删掉,

删掉我们再来发get请求,我们发现found false

就找不到三号了,我们的GET是用来检索文档,delete我们可以来删除文档,head检查文档是否存在,

如果我们想要更新,我们再用PUT命令,新增和修改文档,我们只需要REST API的操作就行了,比如我们

还是之前的1号员工为例,我们在保存1号员工的时候呢,我们之前已经保存过一次了,我再来保存一次,

比如我要把25改成28,


{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        28,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

我再来保存的时候呢,发现Version会叠加

result是update,我们第一次添加是created,而我们以后还是一号用户,版本每次都会增加,这就是我们使用

REST风格,就是改变我们请求方式,对ES中的数据进行增删改查,我们继续来测试更多的基本功能,我们点进

轻量搜索里边

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_search_lite.html

如果我们想要搜素所有的员工,以前我们在这些文档的ID

GET /megacorp/employee/_search

现在我们只要变成_search

我们来试一下,所有数据都在hits里面,有index,有数据的索引,类型,以及ID,我们接下来再往下看,这里还有ID为1的,

一个叫Jane,一个叫Jone

这是找所有,包括我们想要哪些条件,比如我们要想找last_name是Smith的

GET /megacorp/employee/_search?q=last_name:Smith

我们只需要带上这个参数,q=last_name:Smith,这个我们称为查询字符串,

http://59.110.158.145:9200/megacorp/employee/_search?q=last_name:Smith

我们也同样找到了

他们的last_name都叫Smith,只不过一个叫Jane,一个叫Jone,而我们这个有相关性得分,我们就得到了

这条结果,我们可以看更多的搜索查询,比如我们搜索的时候不写查询字符串,我们使用查询的表达式,

所谓查询表达式呢,给ES提供一串JSON表达式,JSON里面指定查询规则,

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

语法大概看一下,查询按照一个匹配规则,匹配规则就是last_name等于Smith,更多的语法可以结合文档慢慢的学习,

虽然这个示例是发GET请求,他这个东西是放在请求体中的,GET没有请求体,所以我们测试的时候发POST就行了,

查询还是不用写查询字符串了,写上我们这些查询规则

我们看到和之前的效果是一样的,total找到两个没问题,这个JSON查询的表达式,是非常重要的,

比如这里有一个更复杂的查询示例,只要我们把查询表达式写的复杂,他就会做更复杂的工作,

GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            },
            "filter": {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            }
        }
    }
}

匹配last_name是Smith的,filter要过滤,按照什么过滤呢,按照年龄要大于30岁以上,所以我们写了一个复杂的

查询规则

定义复杂的查询表达式,我们继续检索其他的检索功能,我们来找全文检索,全文检索我来换上一个表达式

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

我们根据员工的about字段查,查他是否有"rock climbing",我们来点一个send

还有短语检索

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_phrase_search.html

我们刚才看到全文检索的情况下,我们要检索的这两个字段,你有任何一个都行,但是往往我们有时候要检索,

要他完全匹配,我们把它当做一个完整的单词,而不是分词了,要把它当成完整的单词呢,来进行搜索

POST /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

这个时候就只会查处一个结果了,他要完整匹配, 把rock_climbing当成一个单词,那只能查出一条记录,这就是我们说的短语搜索,

把它当成一个完整的短语,还有高亮搜索

https://www.elastic.co/guide/cn/elasticsearch/guide/current/highlighting-intro.html

比如我们还是按照完全匹配的方式,找rock_climbing,然后我们要高亮的字段,在这指定,这是新的查询表达式

POST /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

 

视频资源太大,这里提供百度云链接: 资源包括项目源码和所需的数据: 01-1 _课程导学~1.mp4 01-2 说明和建议~1.mp4 02-1 -术语介绍 .mp4 02-2 Document介绍.mp4 02-3 index介绍 .mp4 02-4 -restapi介绍 .mp4 02-5 -index_api .mp4 02-6 -document_api.mp4 03-01 -书的目录与索引.mp4 03-02 -正排与倒排索引简介.mp4 03-03 -倒排索引详解.mp4 03-04 -分词介绍.mp4 03-05 -analyze_api .mp4 03-06 -自带分词器.mp4 03-07 -中文分词.mp4 03-08 -自定义分词之CharacterFilter .mp4 03-09 自定义分词之Tokenizer .mp4 03-10 -自定义分词之 TokenFilter .mp4 03-11 -自定义分词.mp4 03-12 -分词使用说明 .mp4 03-13 -官方文档说明.mp4 04-01 -mapping简介.avi 04-02 -自定义 mapping .avi 04-03 -mapping演示.avi 04-04 -copy_to参数说明.avi 04-05 -index参数说明.avi 04-06 -index_options参数说明.avi 04-07 -mapping文档说明.avi 04-08 -数据类型.avi 04-09 -dynamic-mapping简介.avi 04-10 -dynamic日期与数字识别.avi 04-11 -dynamic-template简介.avi 04-12 -自定义mapping的建议.avi 04-13 -索引模板.mp4.avi 05-01 -SearchAPI概览.avi 05-02 -URISearch详解与演示.avi 05-03 -QueryDSL简介.avi 05-04 -字段类查询简介及match-query.avi 05-05 -相关性算分.mp4.avi 05-06 -match-phrase-query_音频.mp4.avi 05-07 -query-string-query.avi 05-08 -simple-query-string-query.avi 05-09 -term-terms-query.avi 05-10 -range-query.avi 05-11 -复合查询介绍及ConstantScore.avi 05-12 -bool-query.avi 05-13 -count-and-source-filtering.avi 06-01 -分布式介绍及cerebro.avi 06-02 -构建集群.avi 06-03 -副本与分片.avi 06-04 -两个问题.avi 06-05 -集群状态.avi 06-06 -故障转移.mp4.avi 06-07 -文档分布式存储.avi 06-08 -脑裂问题.avi 06-09 -shard详解.avi 07-1 -Query-Then-Fetch.avi 07-2 -相关性算分.avi 07-3 -sorting-doc-values-fielddata.avi 07-4 -分页与遍历-fromsize.avi 07-5 分页与遍历.avi 07-6 分页与遍历-search_after.avi 07-7 文档说明.mp4.avi 08-1 -聚合分析简介.avi 08-2 -metric聚合分析.avi 08-3 -bucket聚合分析.avi 08-4 -bucket和metric聚合分析.avi 08-5 -pipeline聚合分析.avi 08-6 -作用范围.avi 08-7 -排序.avi 08-8 -原理与精准度问题.avi 08-9 -文档说明.avi 09-1 -数据建模简介.avi 09-2 -ES数据建模配置相关介绍.avi 09-3 -ES数据建模实例.mp4.avi 09-4 -Nested_Object.avi 09-5 -Parent_Child.avi 09-6 -nested_vs_parent_child.avi 09-7 -reindex.avi 09-8 其他建议.avi 10-1 生产环境部署建议.avi 10-2 写性能优化.avi 10-3 读性能优化.avi 10-4 如何设定shard数.avi 10-5 xpack监控功能介绍.avi 11-1 入门及架构简介.avi 11-2 -Life_of_an_Event.avi 11-3 -queue简介.avi 11-4 -线程简介.avi 11-5 配置简介.avi 11-6 多实例运行.avi 11-7 pipeline配置简介.avi 12-01 input插件详解及glob讲解.avi 12-02 -codec插件详解.avi 12-03 filter插件简介及date插件讲解.avi 12-04 filter插件之grok简介(上).avi 12-05 filter插件之grok简介(下).avi 12-06 filter插件之dissect讲解.avi 12-07 filter插件之mutate 讲解.avi 12-08 filter插件之 json讲解.avi 12-09 filter 插件之geoip和ruby 讲解.avi 12-10 output插件简介.avi 12-11 文档说明.avi 123.bat 13-1 -Logstash实战建议.avi 13-2 -实战之apacheLogs(上).avi 13-3 实战之apacheLogs(下).avi 13-4 实战之csv.avi 13-5 监控运维建议.avi 14-1 beats简介.avi 14-2 Filebeat_Demo.avi 14-3 Filebeat 简介及流程介绍.avi 14-4 Filebeat常见架构及ingest_node介绍.avi 14-5 Filebeat_Module简介.avi 15-1 -简介.avi 15-2 -Module简介.avi 15-3 -实战.mp4.avi 16-1 1-简介(1).avi 16-1 1-简介(1).avi.baiduyun.downloading 16-1 1-简介.avi 16-2 2-实战.avi 17-1 1-Heartbeat.avi 17-2 2-Community_beats.avi 18-1 -配置与线上部署建议.avi 18-2 -Index_Pattern_Objects_Settings使用.avi 19-1 -导入数据.avi 19-2 -Discover实战.avi 20-1 -可视化简介.avi 20-2 -Basic_Charts_介绍.avi 20-3 -Basic_Charts_其他说明.avi 20-4 -Data图表介绍.avi 20-5 -Map图表介绍.avi 20-6 -Timelion介绍.avi 20-7 -VisualBuilder介绍.avi 20-8 -other图表介绍.avi 20-9 -Dashboard介绍.avi 21-1 -项目介绍.avi 21-2 项目实战.avi 22-1 介绍和数据导入.avi 22-2 -实战.avi 23-1 项目简介.avi 23-2 实战(上).avi 23-3 实战(下).avi 24-1 课程总结.avi codes.zip project.zip 文件树.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值