ElasticSearch之文档、索引和基本API

文档(Document)

  • Elasticsearch是面向文档的,文档是所有可搜索数据的最小单元。(可以理解为数据库中的一条记录)

    1. 日志文件中的日志项
    2. 一本电影的具体信息/一张唱片的详细信息
    3. MP3播放器里的一首歌/一篇PDF文档中的具体内容
  • 文档会被序列化成JSON格式,保存在Elasticsearch中

    1. JSON对象由字段组成
    2. 每个字段都有对应的字段类型(字符串、数值、布尔、日期、二进制、范围类型)
  • 每个文档都有一个UniqueID

    1. 你可以自己指定ID
    2. 或者通过Elasticsearch自动生成

JSON文档

  1. 一篇文档包含了一系列的字段。类似于数据库表中的一条记录。
  2. JSON文档格式灵活,不需要预先定义格式(不需要和数据库那样提前定义表结构,提供建表语句等)
    • 字段的类型可以自己指定,也可以通过Elasticsearch自动推算。
    • 支持数组/嵌套。

文档的元数据

{
  "_index" : "index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "程大帅"
  }
}

  • _index:文档所属的索引
  • _type:文档所属的类型名
  • _id:文档的唯一id
  • _source:文档的原始JSON数据
  • _all:整合所有字段内容到该字段(废除)
  • _version:文档的版本信息
  • _source:相关性打分

索引

概念:简单说索引是文档的容器,是一类文档的结合(类似于数据库中的表)

  • 每个索引都有自己的mapping定义,用于定义包含文档的字段名和字段类型
  • Shard体现了物理空间的概念,索引中的数据分布在不同的shard上。
  • Mapping定义了索引字段的名称和类型
  • Setting定义不同的数据分布
{
  "index" : { // 索引名
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "index",
        "creation_date" : "1639913482690",
        "number_of_replicas" : "1",
        "uuid" : "Qxkdm_RvT-uHH3XiYJEpSg",
        "version" : {
          "created" : "7160099"
        }
      }
    }
  }
}

索引的不同语义

索引(动词)文档到Elasticsearch的索引(名词)中

名词:一个Elasticsearch集群中,可以创建很多个不同的索引。
动词:保存一个文档到Elasticsearch的过程也叫做索引(indexing)。ES中,可以理解为创建一个倒排索引的过程
名词:我们通常理解的索引:B树索引,倒排索引

Type

在7.0之前,一个index可以设置多个Types
在6.0开始,Type已经被废弃。7.0开始一个索引只能创建一个Type ——”_doc“。

传统关系型数据库和es结构对比

es 提供高性能的全文检索,对搜索结构进行聚合分析等。
RDMS提供事务性,联合查询等。

关系型数据库Elasticsearch
TableIndex(type)
RowDocument
ColumnFiled
SchemaMapping
SQLDSL

什么是数据建模?

数据建模是创建数据模型的过程。
数据模型是对真实世界进行抽象描述的一种工具和方法,实现对像是世界的映射。

三个过程:概念模型 - 逻辑模型 - 数据模型(遵循第三范式)
数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义。

如何对字段进行建模?

字段类型 - 是否需要搜索及分词 - 是否需要聚合及排序 - 是否需要额外的存储

字段类型

  • Text

    • 用于全文本字段,文本会被Analyzer分词
    • 默认不支持聚合分析及排序。需要设置fielddata为true
  • Keyword

    • 用于id、枚举、不需要分词的文本。如:电话号码,email地址,手机号码,邮政编码,性别等。
    • 适用于Filter(精准匹配),Sorting和Aggregations
  • 设置多字段类型

    • 默认会为文本类型设置成text,并设置一个keyword的子字段
    • 在处理人类语言时,通过增加“英文”,“拼音”和“标准”分词器,提高搜索结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程大帅气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值