【elasticsearch-1】简介

原创
09/04 14:43
阅读数 31

定义

  • Cluster: 集群,由一个或多个节点组成
  • Node: 单个 Elastic 实例
  • Index: 索引,复数是 Indices,是一组文档的集合
  • Shard: 分片,es 是个分布式的搜索引擎,索引通常都会被分解成不同部分,而这些分布在不同节点上的数据就是分片,
  • replica: 副本,ES 默认为每个索引创建 5 个主分片,并分别为其创建一个副本分片
  • Type: 类型,ES7 已经弃用,默认一个索引只有一个默认 Type,即_doc
  • Document: 文档,json 类型

与 Mysql 类比

  • Index 对应 Database
  • Type 对应 Table
  • Document 对应 表里每一条记录

ES7.0 Type 被废弃

  • 从 ES7.0 版本起,废弃 Type,一个 index 只有一个默认 type,即 _doc
  • ES 废弃 Type 后,库表合一

与 Mysql 类比

  • ES 实例 对应 Database
  • Index 对应 Table
  • Document 对应 表里的每一条记录

文档唯一性

一般讲 index + type + 文档 _id 在一个实例或集群全局唯一, 实际上是 index + type + 分片标识 + 文档 _id

数据类型

见官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.2/mapping-types.html

字符串类型

  • ES5.0 之前,字符串是 string
  • 从 ES5.0 起,string 类型被废弃,引入 keyword, text 两种类型
  • keyword 不支持全文搜索,只能使用精准匹配,最长长度 32766 字节(utf8 中,英文字母是 1 字节,中文是 3 字节,表情符合是 4 字节)
  • text 支持全文搜索,无限制长度

数组

  • 正常 json 数组,[]
  • 查询时,命中数组中的其中一个,就会认为符合条件

mapping 和 settings 结构

ES7

{
  "mappings" : {
    "properties" : {
      "name" : {                    // 属性名
        "type" : "keyword"          // 属性类型
      }
    }
  },
  "settings" : {
    "index" : {
      "number_of_shards" : 1,       // 分片数
      "number_of_replicas" : 2      // 副本数
    }
  }
}

ES6

{
  "mappings" : {
    "student": {                    // 自定义type
      "properties" : {
        "name" : {                  // 属性名
          "type" : "keyword"        // 属性类型
        }
      }
    }
  },
  "settings" : {
    "index" : {
      "number_of_shards" : 1,       // 分片数
      "number_of_replicas" : 2      // 副本数
    }
  }
}

问题

创建索引时,必须指定 mapping 和 settings 吗?

不是,有以下几种行为:

  • ES7 中在创建索引时,指定 mapping
  • ES7 中在创建索引时,指定 mapping 和 settings
  • ES7 中先创建索引,后指定 mapping
  • ES6 中在创建索引时,指定 mapping 和 settings

设置索引副本数量和分片数量是为了什么?

  • 每个节点的分片数量保持在低于每 1GB 堆内存对应集群的分片在 20-25 之间。
  • 分片大小为 50GB 通常被界定为适用于各种用例的限制。
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部