极客ES02

ES入门(二),基本概念

基础概念部分

Cluster(集群)

cluster(集群)是一个或者多个节点的集合,它们一起保存数据并且提供所有节点联合索引以及搜索功能。集群存在一个唯一的名字身份且默认为 “elasticsearch”。

Node(节点)

node(节点)是一个单独的服务器,它是集群的一部分,存储数据,参与集群中的索引和搜索功能。像一个集群一样,一个节点通过一个在它启动时默认分配的一个随机的 UUID(通用唯一标识符)名称来识别。

index(索引)-类似传统数据库中的数据库(虚拟逻辑空间概念)
  • index(索引)是具有稍微类似特征文档的集合。例如,您有一个消费者数据的索引,一个产品目录的索引,和另一个是订单数据的索引。一个索引通过名字(必须全部是小写)来标识,并且该名字在对 document(文档)执行 indexing(索引),search(搜索),update(更新)和 delete(删除)操作时会涉及到。

  • 作为动词:存储数据到 Elasticsearch 的行为叫做 索引 ,但在索引一个文档之前,需要确定将文档存储在哪里。

  • mappings,定义文档字段的类型

  • settings,定义不同的数据分布

Type(类型)-类似传统数据库中的表-(虚拟逻辑空间概念)

在 Index(索引)中,可以定义一个或多个类型。一个类型是索引中一个逻辑的种类/分区,它的语义完全取决于您自己。一般情况下,一个类型被定义成一组常见字段的文档。

在7.0版本之后,一个index只可以拥有一个type

Document(文档)-类似于传统数据库中的一条纪录

document(文档)是索引信息的基本单位。例如,您有一存储 customer(客户)数据的文档,另一个是存储 product(产品)数据的文档,还有一个是存储 order(订单)数据的文档。该文档可以使用 JSON 来表示,它是一种无处不在的互联网数据交换格式。

Shards & Replicas(分片 & 副本)— (真实存在)
  • 一个索引可以有多个分片,用于存储大量数据
  • 副本是对于分片的副本,是为防止发生意外而对数据的备份

更多 https://elasticsearch.apachecn.org/#/docs/1

文档的元数据 Meta
  • 元数据,用于标注文档的相关信息

    • _index: 文档所属索引名
    • _type: 文档所属类型名
    • _id: 文档的唯一ID
    • _source: 文档的原始JSON数据
    • _all: 整合所有字段内容到该字段,已被废除
    • _version: 文档版本信息,用于解决并发冲突
    • _source: 相关性打分
  • 需要通过Kibana导入Sample Data的电商数据。具体参考“2.2节-Kibana的安装与界面快速浏览”

与传统数据库对比
RDBMSElasticSearch
TableIndex
RowDocument
ColumnField
RowDocument
SchemaMapping
SQLDSL
分布式系统的可用性和拓展性

elasticsearch属于分布式系统,具有高可以性,和可扩展性

  • 高可用性

    • 服务可用性:允许所有节点停止服务
    • 数据可用性:部分节点丢失,不会丢失数据
  • 可扩展性

    • 请求量提升/数据的不断增长(将数据分配到所有节点上)

基本概念(1)- 索引,文档和 REST API

Index 相关 API

#查看索引相关信息
GET kibana_sample_data_ecommerce

#查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

#查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}

#_cat indices API
#查看indices
GET /_cat/indices/kibana*?v&s=index

#查看状态为绿的索引
GET /_cat/indices?v&health=green

#按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc

#查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

#How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc

相关阅读

  • 为什么不再支持单个Index下,多个Tyeps https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0
  • CAT Index API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-indices.html

基本概念(2):节点,集群,分片及副本

课程Demo

  • 需要通过Kibana导入Sample Data的电商数据。具体参考“2.2节-Kibana的安装与界面快速浏览”
get _cat/nodes?v
GET /_nodes/es7_01,es7_02
GET /_cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m


GET _cluster/health
GET _cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards

#### cluster state
The cluster state API allows access to metadata representing the state of the whole cluster. This includes information such as
GET /_cluster/state

#cluster get settings
GET /_cluster/settings
GET /_cluster/settings?include_defaults=true

GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

相关阅读

  • CAT Nodes API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-nodes.html
  • Cluster API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cluster.html
  • CAT Shards API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-shards.html

单个文档操作CRUD

1.增加文档

  • POST index/type/ 自动生成ID
############Create Document############
#create document. 自动生成 _id
POST users/_doc
{
	"user" : "Mike",
    "post_date" : "2019-04-15T14:12:12",
    "message" : "trying out Kibana"
}

注意:Es在7.0版本之后统一使用_doc代替type

  • PUT index/type/id?op_type=create 指定ID,若ID已存在,报错
#create document. 指定Id。如果id已经存在,报错
PUT users/_doc/1?op_type=create
{
    "user" : "Jack",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
  • PUT index/_create/id 指定 ID 如果已经存在,就报错
#create document. 指定 ID 如果已经存在,就报错
PUT users/_create/1
{
     "user" : "Jack",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
  • PUT index/type/id 指定ID,如果已经存在,则先删除旧数据,再插入新数据
PUT users/_doc/1
{
	"user" : "Mike"
}

因此,此API不可用于增加某个文档的字段,因为它会删除原来的文档数据,若要更新,则使用_update API,见下文

2.更新文档

  • POST index/_update/id 更新指定ID的文档
#在原文档上增加字段
POST users/_update/1/
{
    "doc":{
        "post_date" : "2019-05-15T14:12:12",
        "message" : "trying out Elasticsearch"
    }
}

3.删除文档

  • DELETE index/type/id 删除指定ID的文档
### Delete by Id
# 删除文档
DELETE users/_doc/1

4.获取文档

由于篇幅的限制,这里只提及简单获取

  • GET index/type/id 通过ID获取单个文档
### Get Document by ID
#Get the document by ID
GET users/_doc/1

文档批量操作的CRUD

1._bulk操作

### Bulk 操作
#执行两次,查看每次的结果

#执行第1次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }


#执行第2次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

注意点
  • 支持在一次API中,对不同的索引进行操作
  • 支持四种类型操作 index create update delete
  • 可以在URL中指定Index,也可以在请求的Playload中进行
  • 操作中单条失败,并不会影响其他操作
  • 返回结果包括了每一条操作执行的结果

2._mget批量读取数据

GET /_mget

GET /index/_mget

### mget 操作
GET /_mget
{
    "docs" : [
        {
            "_index" : "test",
            "_id" : "1"
        },
        {
            "_index" : "test",
            "_id" : "2"
        }
    ]
}

#URI中指定index
GET /test/_mget
{
    "docs" : [
        {

            "_id" : "1"
        },
        {

            "_id" : "2"
        }
    ]
}

# 自定义每个查询
GET /_mget
{
    "docs" : [
        {
            "_index" : "test",
            "_id" : "1",
            "_source" : false
        },
        {
            "_index" : "test",
            "_id" : "2",
            "_source" : ["field3", "field4"]
        },
        {
            "_index" : "test",
            "_id" : "3",
            "_source" : {
                "include": ["user"],
                "exclude": ["user.location"]
            }
        }
    ]
}

3._msearch批量查询(包含查询体)

POST index/_msearch

### msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}

相关阅读

  • Document API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值