ElasticSearch6.x入门?看这一篇就够了

举报
LoneWalker、 发表于 2023/08/27 16:29:31 2023/08/27
【摘要】 ElasticSearch6.x入门?看这一篇就够了

什么是ES?

ES 是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)

相关概念知识

以下解释仅仅为了方便理解,不代表等同。

    • 分片:类似小说分章节
    • Index(索引):类似关系型数据库中的数据库
    • Type: 类似关系型数据库中的表。在 ES 6.x 中只允许每个 Index 中包含一个 Type。在 7.x 版本中将彻底移除 Type。
    • Document(文档):是存储在Elasticsearch中的JSON文档。它就像关系数据库中表中的一行
    • field:相当于列
    • id:标识一个文档,必须是唯一的。如果没有提供ID,则会自动生成
    • mapping:定义一个type

    相关结构

    ES默认会有5个分片,1个备份

    image.gifes1.png

    image.gifes2.png

    数据类型

    image.gifes3.png

    字符串类型

      • text:当一个字段是要被全文搜索的,比如产品描述,应该使用text类型。text类型的字段不用于排序,很少用于聚合。
      • keyword:类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤、排序、聚合。keyword类型的字段只能通过精确值搜索到。

      整数类型

      在满足需求的情况下,尽可能选择范围小的数据类型。比如,某个字段的取值最大值不会超过100,那么选择byte类型即可。迄今为止吉尼斯记录的人类的年龄的最大值为134岁,对于年龄字段,short足矣。

      字段的长度越短,索引和搜索的效率越高。

      类型 取值范围
      byte -128~127
      short -32768~32767
      integer -2^31~2^31-1
      long -2^63~2^63-1

      浮点类型

      类型 取值范围
      doule 64位双精度IEEE 754浮点类型
      float 32位单精度IEEE 754浮点类型
      half_float 16位半精度IEEE 754浮点类型
      scaled_float 缩放类型的的浮点数

      时间类型

      日期将始终以字符串形式呈现,即使最初在JSON文档中提供的日期很长也是如此。  format可以是如下这种||的形式

      "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"

      image.gif

      布尔类型

      布尔字段接受JSONtruefalse值,但也可以接受为 "true" 或 "false" 的字符串

      范围数据类型

      integer_range

      一个带符号的32位整数范围,最小值为-2^31,最大值为2^31-1

      float_range

      一系列单精度32位IEEE 754浮点值。

      long_range

      一系列带符号的64位整数,最小值为-2^63,最大值为2^63-1

      double_range

      一系列双精度64位IEEE 754浮点值。

      date_range

      自系统时代以来经过的一系列日期值,表示为无符号的64位整数毫秒。

      ip_range

      支持IPv4IPv6(或混合)地址的一系列ip值。

      RestFul风格操作

      GET请求:

      • http://ip:port/index : 查询索引信息
      • http://ip:port/index/type/doc_id : 查询指定的文档信息

      POST请求:

      • http://ip:port/index/type/_search : 查询文档,可以在请求体中添加json字符串来代表查询条件
      • http://ip:port/index/type/doc_id/_update : 修改文档,在请求体中指定json字符串代表修改的具体信息

      PUT请求:

      • http://ip:port/index : 创建一个索引,需要在请求体中指定索引的信息,类型,结构
      • http://ip:port/index/type/_mappings : 代表创建索引时,指定索引文档存储的属性的信息

      DELETE请求:

      • http://ip:port/index : 删库跑路
      • http://ip:port/index/type/doc_id : 删除指定文档

      倒排索引结构

      如何理解倒排索引呢?假如现有三份数据文档,文档的内容如下分别是:

        • Java is the best programming language.
        • PHP is the best programming language.
        • Javascript is the best programming language.

        为了创建倒排索引,我们通过分词器将每个文档的内容域拆分成单独的词(我们称它为词条或 Term),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。

        结果如下所示:

        Term          Doc_1    Doc_2   Doc_3
        -------------------------------------
        Java        |   X   |        |
        is          |   X   |   X    |   X
        the         |   X   |   X    |   X
        best        |   X   |   X    |   X
        programming |   x   |   X    |   X
        language    |   X   |   X    |   X
        PHP         |       |   X    |
        Javascript  |       |        |   X
        -------------------------------------

        image.gif

        这种结构由文档中所有不重复词的列表构成,对于其中每个词都有一个文档列表与之关联。这种由属性值来确定记录的位置的结构就是倒排索引。带有倒排索引的文件我们称为倒排文件。

        我们将上面的内容转换为图的形式来说明倒排索引的结构信息,如下图所示:

        image.gifes4.png

        其中主要有如下几个核心术语需要理解:

        • 词条(Term):索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。
        • 词典(Term Dictionary):或字典,是词条 Term 的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
        • 倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。
        • 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。
        【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
        • 点赞
        • 收藏
        • 关注作者

        评论(0

        0/1000
        抱歉,系统识别当前为高风险访问,暂不支持该操作

        全部回复

        上滑加载中

        设置昵称

        在此一键设置昵称,即可参与社区互动!

        *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

        *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。