6.1 Elasticsearch入门

83 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

6.1 Elasticsearch入门

image-20220725112019115

image-20220725112221624

www.elastic.co

  • 6.0之后索引对应表,文档对应行,字段对应列
# 6.0 之前
ES索引、类型、文档、字段和MySQL中的 数据库、表、行、列相对应。
ES中文档的数据通常采用的是JSON,JSON中的每一种属性叫字段。

但是在 ES6.0 之后的版本当中,这些关系逐渐要发生变化,主要集中在前两个部分,主要是它想废弃类型的这个概念,那么谁对应表呢:索引。所以,6.0 之后一个索引对应一张表,文档还是对应行,字段还是对应列。6.0 之后仍保留了类型,只不过类型一个固定的单词,而不是表名了,7.0之后就彻底废弃掉了。
  • 集群:一台或多台ES服务器组合在一起就是一个集群

  • 节点:集群当中的每一台服务器称为节点

  • 分片:一个索引也就是一个表,分片指的是对索引进一步的划分,一个索引在存的时候可以拆分成多个分片进

    ​ 行存储,这样的话并发能力就提高了。

  • 副本:副本是对分片的备份,一个分片可以包含多个副本,有了备份以后,万一说某一个副本数据丢了,挂

    ​ 了,那么还有其他的备份,这样的话提高系统的可用性。

安装ES

www.elastic.co/cn/elastics…

image-20220725144000932

image-20220725145122997

image-20220725151659198

image-20220725151805253

将下载好的压缩包解压缩

解压好之后我们需要稍微改一下它的配置

image-20220725154354607

image-20220725174156933

然后我们来配置一下环境变量,因为一会我们会通过命令行的方式运行ES的常用命令,

image-20220725160254396

image-20220725160232299

然后我们还要装一个中文的分词插件,为什么呢,比如搜“互联网校招”,肯定是分成“互联网”和“校招”分别查询

这个分词插件在GitHub上

下载链接:

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip

image-20220725171044667

image-20220725171223844

image-20220725171405524

image-20220725171435951

下载好压缩包之后必须解压缩到固定的目录下,首先进入elasticsearch-6.4.3\plugins 目录下, 然后自己新建一个ik文件夹 我们在将elasticsearch ik解压到ik文件夹下 记住千万不要 将elasticsearch-analysis-ik-6.4.3这个文件夹放入到ik 我们只需要将 elasticsearch-analysis-ik-6.4.3 里的那些文件放入到 ik 即可

image-20220725174718408

如果有网络新词出现

image-20220725172013300

然后我们再安装一个文件

www.getpostman.com/

postman可以模拟web客户端, 说白了可以模仿网页,发送http请求,为什么需要这么一个工具呢,因为其实我们直接通过命令行去访问ES服务器,如果是查询某些东西还好,但是如果要往里面存东西,这个命令太长了,记不住,也很难写,因为ES支持用http方式去访问,如果我们有一个现成的网页,有一个框往里面填数据很方便,但是我们没有这个网页,那么这个 postman 就能替代那个网页,然后可以通过框构造一些数据提交给ES服务器,这样比较方便。即便是我们从ES中搜索数据,如果说我们搜索的规则比较复杂,那个时候命令也很难写,使用postman会比较方便。总之,为了提高入门ES使用的体验,我们使用postman。

演示使用ES

首先我们演示如何通过命令行的方式访问它,当然在访问之前,我们得将 elasticsearch 启动起来

image-20220725173653511

这里我们双击

image-20220725174939354

打开命令行工具cmd作为客户端访问一下服务器

# ES命令

查看ES集群的健康状况
curl -X GET "localhost:9200/_cat/health?v"       

查看集群中有什么节点
curl -X GET "localhost:9200/_cat/nodes?v"   

查看当前的ES服务器有多少个索引
curl -X GET "localhost:9200/_cat/indices?v" 

创建索引
curl -X PUT "localhost:9200/test" 

删除索引
curl -X DELETE "localhost:9200/test" 

image-20220725181142393

接下来演示一下使用postman来代替web客户端去访问ES

image-20220725182052331

image-20220725182210656

image-20220725182451548

如何往ES里面插入数据改数据插入数据是一样的,只不过是把提交的数据修改一下再插入,ES底层会先删再添加

image-20220725183258377

查询某条数据

image-20220725183611502

删除某条数据

image-20220725184342523

ES存在的价值在于它里面的数据能够被我们搜索,这个搜索不是像查数据库,而是说提供一句话,需要分词,再去库里去匹配,匹配的时候还不是固定的某一个字段,既想搜title,又想搜content,是全文的匹配,那么数据库这一点是做不到的,它不能分词,接下来演示一下如何实现这种搜索,我们先往里面存三条数据,

image-20220725184921335

image-20220725185029229

image-20220725185210212

三条数据都插入了,接下来是搜索

localhost:9200/test/_search
没有加条件就是全部搜索

image-20220725185716247

搜索标题title,查询标题有“互联网”字样的
localhost:9200/test/_search?q=title:互联网

image-20220725185926351

搜索内容中含有"运营实习"字样的
localhost:9200/test/_search?q=content:运营实习

image-20220725190252999

既要搜title又要搜content,只要包含这个词条都显示出来,这时候搜的逻辑就有点复杂了,通过路径搞不定了,

路径
localhost:9200/test/_search
具体的搜索条件在Body中提交
{
    "query": {
        "multi_match": {
            "query": "互联网",
            "fields": ["title", "content"]
        }
    }
}

image-20220725191151632