美文网首页
ES基本概念及操作

ES基本概念及操作

作者: 爱钓鱼的码农 | 来源:发表于2021-03-12 14:43 被阅读0次

基础概念

索引(index) /类型(type)
相当于关系数据库中的table概念。Elasticsearch5.x版本支持多个type,6.x版本支持一个type,7.x版本只允许_doc的type。
映射(mapping)
相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。
文档(document)
相当于数据库中的row。文档是Elasticsearch中主要的实体,所有Elasticsearch的查询都是基于存放在Elasticsearch中文档资源的查询。实际上,从用户的角度看,一个Elasticsearch文档就是一个JSON对象。
字段(field)
相当于数据库中的column,字段可以指定分词器(analyzer)。

Elasticsearch基本数据类型

字符串类型:text(分词)、keyword(不分词)
日期类型: date
布尔类型: boolean
IP类型: ip
地理位置类型: geo_point
整数类型: byte, short, integer, long
浮点数类型: float, double, half_float, scaled_float

Elasticsearch写入流程

W1.jpeg
W2.jpeg

客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)。
coordinating node,根据docId对document进行路由,将请求转发给对应的node(primary shard)。
实际的node上的primary shard处理请求,然后将数据同步到replica node。
coordinating node,如果发现primary node和所有replica node都搞定之后,就返回响应结果给客户端。
每个shard(分片)先在内存中写入索引,然后再写transLog(事务日志)。索引定期刷新到磁盘,事务日志默认同步刷新到磁盘。

Elasticsearch查询流程

Q1.jpeg
Q2.jpeg

搜索通常是一个两阶段过程,称之为 Query Then Fetch。
在Query阶段时,查询会广播到索引中每一个分片拷贝(主分片或者副本分片),每个分片在本地执 行搜索并构建一个匹配文档的大小为 from + size 的优先队列。
每个分片返回各自优先队列中所有文档的ID和排序值给协调节点,协调节点合并这些值到自己的优 先队列中来产生一个全局排序后的结果列表。
在Fetch取回阶段,协调节点辨别出哪些文档需要被取回,并向相关分片(primary或replica分片随机选择)提交多个GET请求,接着返回文档给协调节点。一旦所有的文档都被取回了,协调节点返回结果 给客户端。
关键词查询请求会同时从内存、磁盘的索引查找。主键查询请求先从事务日志获取文档信息,事务日志中没有命中再从磁盘获取文档信息,可以保证数据写入后实时获取文档信息。

Elasticsearch基本操作 -- 常用管理API

查看elasticsearch版本
  GET /
查看健康状况
  GET /_cat/health?v
查看节点信息
  GET /_cat/nodes?v
查看索引信息
  GET /_cat/indices?v
查看JVM内存
  GET /_nodes/stats/jvm?pretty
查看磁盘
  GET /_cat/allocation?v
查看安装插件
  GET /_cat/plugins?v

Elasticsearch基本操作 --创建索引

#创建索引
PUT /twitter?include_type_name=true
{
  "settings": {
    "index": {
      "number_of_shards": "5",
      "number_of_replicas": "1"
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "user": {
          "type": "keyword"
        },
        "post_date": {
          "type": "date"
        },
        "message": {
          "type": "text",
          "analyzer": "cjk"
        }
      }
    }
  }
}

Elasticsearch基本操作 --写入数据


PUT /twitter/_doc/1?pretty
{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}
PUT /twitter/_doc/2?pretty
{
    "user": "kimchy",
    "post_date": "2009-11-15T14:12:12",
    "message": "Another tweet, will it be indexed?"
}

PUT /twitter/_doc/3?pretty
{
    "user": "elastic",
    "post_date": "2010-01-15T01:46:38",
    "message": "Building the site, should be kewl"
}

Elasticsearch基本操作--主键查询

主键查询
GET /twitter/_doc/1
GET /twitter/_doc/2
GET /twitter/_doc/3

Elasticsearch基本操作--查询语法

Lucene查询语法
GET /twitter/_search?q=user:kimchy
DSL查询语法
GET /twitter/_search
{
    "query" : {
        "match" : { "user": "kimchy" }
    }
}

查询全部数据
GET /twitter/_search
{
    "query" : {
        "match_all" : {}
    }
}

#时间范围查询
GET /twitter/_search?pretty=true
{
    "query" : {
        "range" : {
            "post_date" : { 
              "from" : "2009-11-15T13:00:00", 
              "to" : "2009-11-15T14:00:00" 
            }
        }
    }
}
#关键词查询
GET /twitter/_search
{
  "query": {
    "query_string" : {
        "query": "(user:kimchy OR user:elastic) AND message:tweet"
    }
  }
}

Elasticsearch基本操作--聚合统计

查看索引字段信息
GET /twitter

#聚合统计
POST /twitter/_search?pretty
{
  "size": 0,
  "aggs": {
    "group_by_user": {
      "terms": {
        "field": "user"
      }
    }
  }
}

Elasticsearch基本操作--修改数据

#修改整个文档
PUT /twitter/_doc/3
{
    "user": "ouyangchucai",
    "post_date": "2019-08-08T08:08:08",
    "message": "Elasticsearch is nice"
}

#修改部分文档
POST twitter/_update/3
{
    "script" : "ctx._source.user = 'shay'"
}

Elasticsearch基本操作--删除数据

按主键删除记录
  DELETE /twitter/_doc/2
删除索引
  DELETE /twitter

Elasticsearch基本操作—bulk批量请求

#批量请求
POST /_bulk
{ "index" : { "_index" : "test", "_type" : "_doc", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "_doc", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "_doc", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "_doc", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

最佳实践: Elasticsearch优化

优化.jpeg

Elasticsearch索引和查询性能调优的21条建议
https://mp.weixin.qq.com/s/qs0w4M4ebqmHJRj-G8Dc_A
https://mp.weixin.qq.com/s/Br1RLdsCwP2wp5BU2qKXNg

相关文章

  • ES基本概念及操作

    基础概念 索引(index) /类型(type)相当于关系数据库中的table概念。Elasticsearch5....

  • 引用丨Array类型

    2、Array类型   数组基本概念   ES3   ES5    

  • Elasticsearch 入门学习

    基本概念 ES有些核心基本概念需要先理解,对后续的学习有帮助 1.Near Realtime(NRT):ES是近似...

  • Elasticsearch Java API的基本使用

    说明 在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API.本文假设你已经对ES的基本概念...

  • async 函数的实现原理

    基本概念 ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 async 函数是什么?一句话,...

  • Docker基础(1)—— Docker基本概念

    Docker基础(1)—— 基本概念Docker基础(2)—— 安装及基础操作 关于docker是什么以及dock...

  • 关于ES、PES、PS以及TS码流

    一、基本概念 **1)ES ** ES--Elementary Streams (原始流)是直接从编码器出来...

  • Docker基础(2)—— Docker安装及基础操作

    Docker基础(1)—— 基本概念Docker基础(2)—— 安装及基础操作 二、环境配置 1、下载安装 mac...

  • 操作系统简介

    1.1 课程概述 基本概念及原理 操作系统介绍 中断及系统调用 内存管理 进程及线程 调度 同步 文件系统 I/O...

  • ElasticSeach

    ES基本概念(ES是非关系型数据库) Index(索引-数据库): ES 数据管理的顶层单位就叫做 Index(索...

网友评论

      本文标题:ES基本概念及操作

      本文链接:https://www.haomeiwen.com/subject/anrzqltx.html