Elasticsearch(1)——倒排索引与HTTP操作Elasticsearch

1 前言

Elastic Stack 核心产品包括 Elasticsearch【存储数据】、Kibana【展示数据】、Beats 和 Logstash【收集与传输数据】(也称为 ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。sa

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。

2 Elasticsearch 安装

  • 下载安装包 Download Elasticsearch 下载版本7.8.0,操作系统为Windows

  • 下载后解压,运行bin文件下的elasticsearch.bat命令
    在这里插入图片描述

  • elasticsearch的服务端口为 9200 \textcolor{red}{9200} 9200 浏览器获得以下响应,服务正常启动
    在这里插入图片描述

3 数据格式

Elasticsearch 是面向 文档型 \textcolor{red}{文档型} 文档型的存储数据库。一条数据就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库Mysql存储数据的概念进行一个类别。索引是独立文档的集合体。类比于Mysql中的DataBase,Type类别与数据库中的表,在Elasticsearch7.X中Type的概念被删除了。每个存储的文档数据就是数据库中每行,文档中的字段信息对应着表的具体栏位。

在这里插入图片描述

4 倒排索引

Elasticsearch 使用一种称为 倒排索引 \textcolor{red}{倒排索引} 倒排索引的结构,它适用于快速的全文搜索。一个倒排索引由文档 中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

假设我们有两个文档,每个文档的正文字段包含如下内容:
1、The quick brown fox jumped over the lazy dog
2、Quick brown foxes leap over lazy dogs in summer

为了创建倒排索引,我们首先将每个文档的正文字段,拆分成单独的词(我们称它为词条或 Tokens),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。

词条文档
quick文档1
lazy文档1 文档2
brown文档1 文档2
fox文档1
leap文档2

假如我们想想要搜索brown ,我们只需要查找包含每个词条的倒排索引

词条文档
brown文档1 文档2

我们可以看到两篇文档中都包含brown字条,两篇文章都被检索出来了。
默认情况下,Elasticsearch 文档每个字段都会被索引。如果某些字段不需要支持查询,可以在映射中配置 “index”: false ,减少存储空间占用,并且提升写入速度。这部分内容我将在后面为大家介绍。

5 常用HTTP请求操作Elasticsearch

5.1 创建索引

类比关系型数据库,当我们操作数据时,需要知道是针对哪一个数据库。Index相当于关系型数据库的DB,所以需要创建索引。可以发送PUT请求 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 \textcolor{red}{ http://localhost:9200/index1} http://localhost:9200/index1 去创建名称为Index1的索引
在这里插入图片描述
再次向浏览器发送该put请求时,会被告知异常

{
    "error": {
        "root_cause": [
            {
                "type": "resource_already_exists_exception",
                "reason": "index [index1/naVrfF_oQ325n2p60qJCnA] already exists",
                "index_uuid": "naVrfF_oQ325n2p60qJCnA",
                "index": "index1"
            }
        ],
        "type": "resource_already_exists_exception",
        "reason": "index [index1/naVrfF_oQ325n2p60qJCnA] already exists",
        "index_uuid": "naVrfF_oQ325n2p60qJCnA",
        "index": "index1"
    },
    "status": 400
}
5.2 查询索引信息

发送Get请求去获得指定索引信息 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 \textcolor{red}{http://localhost:9200/index1} http://localhost:9200/index1
在这里插入图片描述

5.3 删除索引

发送Delete请求去删除指定索引信息 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 \textcolor{red}{http://localhost:9200/index1} http://localhost:9200/index1
在这里插入图片描述

5.4 创建/修改文档

创建文档的操作,类似与向MySQL数据库中的表插入指定的数据信息。与之不同的是,插入的是文档数据,传递请求的中请求体为Json数据
发送Post请求去创建文档数据 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / d o c \textcolor{red}{http://localhost:9200/index1/_doc} http://localhost:9200/index1/doc

index1 指定的文档请求
_doc 文档操作

在这里插入图片描述
创建文档成功后可以返回一个标识文档信息的唯一id。当创建时不指定id时将会随机生成一个字符串。也可以在创建文档时指定文档的唯一标识。可以发送Put请求去创建文档数据 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / d o c / 101 \textcolor{red}{http://localhost:9200/index1/_doc/101} http://localhost:9200/index1/doc/101 ,指定id为101
在这里插入图片描述
PUT 和 POST 请求的区别:

  1. POST理解为新增或更新,PUT理解为更新。因此,在PUT中需要指定id。而POST的话,不指定id(ES会自动生成文档id),指定id(有则修改,无则创建)。
  2. PUT会将新的json值完全替换掉旧的;而POST方式不传 _update 参数新的json值完全替换掉旧的,带_update 参数可以更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加。
  3. PUT操作是幂等的,POST操作不是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,当我们多次发出同样的POST请求后,其结果是创建了若干的资源【不指定文档id的情形】。

再次向Elasticsearch服务器发送Put请求时,将会是一个修改文档的请求
在这里插入图片描述

5.5查找文档

根据文档 i d 查询指定的文档数据 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / d o c / 1001 \textcolor{red}{根据文档id查询指定的文档数据http://localhost:9200/index1/_doc/1001} 根据文档id查询指定的文档数据http://localhost:9200/index1/doc/1001
这里示例查询文档id为1001的文档信息
在这里插入图片描述

5.6局部修改文档

文档的修改分为局部的修改数据和完全覆盖两种模式,完全覆盖修改的方式之前在使用PUT接口和POST接口 【携带id】 http://localhost:9200/index1/_doc/101已经介绍。
局部修改可以发送Post h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / u p d a t e / 101 \textcolor{red}{http://localhost:9200/index1/_update/101 } http://localhost:9200/index1/update/101 _update 文档修改操作
在这里插入图片描述

5.7删除文档

根据文档id 删除指定的文档数据,发送Delete请求 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / d o c / 101 \textcolor{red}{http://localhost:9200/index1/_doc/101 } http://localhost:9200/index1/doc/101
在这里插入图片描述

5.8分页查询

Post请求 h t t p : / / l o c a l h o s t : 9200 / i n d e x 1 / s e a r c h \textcolor{red}{ http://localhost:9200/index1/_search } http://localhost:9200/index1/search _search 文档搜索

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值