IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ElasticSearch的基本操作 -> 正文阅读

[大数据]ElasticSearch的基本操作

1. 节点

概念:节点是一个服务器,属于某个集群数据,参与集群的索引和搜索功能。与集群一样,节点也是通过名称来标识的。默认情况下,启动时会分配给节点一个UUID(全局唯一的标识符)作为名称。如果需要,可以节点取名,通常取名时应考虑功能方便识别和管理。默认情况下,节点加入名为elaticsearch的集群,通过设置节点的集群名,可加入指定集群。

2. 索引

? 索引是具有某种特征的文档集合,相当于一本书的目录,如果,可以为客户数据建立索引,为订单数据建立另一个索引。索引由名称标识,可以使用改名称,对索引中的文档进行建立索引、搜索、更新和删除等操作。一个集群中,索引数量不受限制。

? 类似于rdbms的database,对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。在7.之后被淘汰

3. 类型(Type)

? 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class,同一Json的格式的数据集合。

4. 文档(Document)

文档是可以建立索引的基本信息单元,相当于书的具体章节。

列如:可以为单个客户创建一个文档,为单个订单创建另外一个文档。文档用JSON(JavaScript对象表示法)表示。在索引中,理论上可以存储任意数量的文档。

类似于rdbms的row、面向对象里的object

5. 字段|属性(Field)

? 相当于字段,属性

6. 分片与副本(Shards & Replicas)

索引可能存储大量数据,数据量可能超过单个节点的硬件限制。

切割方式有:

? a.水平切割:允许水平切割内容,以便内容可以存储到普通的服务器中

? b. 允许跨分片操作(如查询时,查询多个分片),提高性能/吞吐量

7. ES概念与MySQL关系对比

MYSQLES5.XES6.XES7.X
Databaseindex
TableTypeIndex(成了摆设)Index(被移除掉)
RowDocumentDocument
ColumnFieldField

3.ElasticSearch RestFulAPI(DSL)

1. 全局操作

  1. 查看集群的健康情况

    GET /_cat/health?v

    status的值含义

    1. green(绿) 一切正常(集群功能齐全)

    2. yellow(黄) 所有数据可用,但是有些副本尚未分配(集群功能完全)

    3. red(红) 有些数据不可用(集群部分功能)

  2. 查看节点情况

  3. GET /_cat/nodes?v

2. 对索引的操作

  1. 查询各个索引的状态

    GET /_cat/indices?v

  2. 创建索引

    PUT /moviee_index
    #PUT /索引名

  3. 删除索引

    DELETE /moviee_index

    返回true表示删除成功

  4. 查看某一个索引的分片情况

    GET /_cat/shards/moviee_index

3. 对文档的操作

  1. 创建文档

    格式:PUT/索引名/类型名/文档id

    PUT /moviee_index/movie/1
    {
      "id":100,
      "name":"operation red sea",
      "doubanScore":8.5,
      "actorList":[
     ? ?  {"id":1,"name":"zhang yi"},
     ? ?  {"id":2,"name":"hai qing"},
     ? ?  {"id":3,"name":"zhang han yu"}
     ?  ]
    }

  2. 查询某一个索引中的全部文档

    GET /movie_index/_search
    DELETE /movie_index/movie/3

  3. 根据文档id查看文档

    格式:GET/索引名/类型名/文档名id

    GET /movie_index/movie/3

  4. 根据文档id,删除某一个文档

    格式:DELETE /索引名/类型名/文档id

     

    删除成功后会给"result"的值标为:"deleted"

  5. 对文档的修改

    语法格式:PUT/索引名/类型名/文档id

    PUT /movie_index/movie/3
    {
      "id":300,
      "name":5.0,
      "actorList":[
     ? ?  {"id":4,"name":"zhang suishan"}
     ?  ]
    }

  6. 更新某一个文档的字段值

    #语法:POST /索引名/类型/文档id/_update
    POST /movie_index/movie/3/_update
    {
      "doc": {"name":"小红"}
    }
    #其中要更新的内容必须放在"doc"中

  7. 批处理

    语法格式: POST /索引名/类型名/_bulk

    1. 需要一:批量创建两个文档

    POST /movie_index/movie/_bulk
    {"index":{"_id":66}}
    {"id":300,"name":"incident red sea","doubanScore":5.0,"actorList":[{"id":4,"name":"zhang cuishan"}]}
    {"index":{"_id":88}}
    {"id":300,"name":"incident red sea","doubanScore":5.0,"actorList":[{"id":4,"name":"zhang cuishan"}]}
    1. 在一个批量操作中,先更新第一个文档(ID 为 66),再删除第二个文档(ID 为 88)

      POST /movie_index/movie/_bulk
      {"update":{"_id":"66"}}
      {"doc": { "name": "wudangshanshang" } }
      {"delete":{"_id":"88"}}

  8. 根据某字段的名称查询(这里根据电影名称查询)

    #根据电影名称查询
    GET /movie_index/_search
    {
      "query":{
     ?  "match":{
     ? ?  "name": "operation red sea"
     ?  }
      }
    }
    #match表示分词查询

  9. 不分词查询(这里根据影员的名字查询),相当于mysql中的like查询

    GET /movie_index/_search
    {
      "query": {
     ?  "match_phrase": {
     ? ?  "actorList.name": "zhang han yu"
     ?  }
      }
    }
    #不分词查询match_phrase

  10. 不分词,通过精准匹配进行查询 term精准匹配

    #不分词,通过精准匹配进行查询 term精准匹配
    GET /movie_index/_search
    {
      "query": {
     ?  "term": {
     ? ?  "actorList.name.keyword":"zhang han yu"
     ?  }
      }
    }
    #查询影员名字为"zhang han yu"的电影

  11. 容错匹配

    ?
    
    
    #容错匹配
    GET /movie_index/_search
    {
      "query": {
     ?  "fuzzy": {
     ? ?  "name": "rivar"
     ?  }
      }
    }
    #这里的rivar原本为:"river",但是也能查询出结果来
  12. 范围过滤

    #范围过滤,将豆瓣评分在6到9的文档查询出来
    GET /movie_index/_search
    {
      "query": {
     ?  "range": {
     ? ?  "doubanScore": {
     ? ? ?  "gte": 6,
     ? ? ?  "lte": 9
     ? ?  }
     ?  }
      }
    }

  13. 根据某字段降序排序

    #按照豆瓣评分降序排序
    GET /movie_index/_search
    {
      "sort": [
     ?  {
     ? ?  "doubanScore": {
     ? ? ?  "order": "desc"
     ? ?  }
     ?  }
      ]
    }
    #"sort"关键字
    #"doubanScore":这是文档中的某个字段
    #"desc"降序排序的关键字

  14. 将包含river的所有电影按照评分降序排序

    #按照豆瓣评分降序排序
    GET /movie_index/_search
    {
      "query": {
     ?  "match": {
     ? ?  "name": "river"
     ?  }
      },
      "sort": [
     ?  {
     ? ?  "doubanScore": {
     ? ? ?  "order": "desc"
     ? ?  }
     ?  }
      ]
    }

  15. 分页查询

    #表示从第一条数据开始,查询一条数据数来
    GET /movie_index/_search
    {
      "from": 0
      , "size": 1
    }
    ?
    #from的值表示查询的起始位置,size表示要显示几条数据

  16. 查询指定字段

    GET /movie_index/_search
    {
      "_source": ["name","doubanScore"]
    }

  17. 将查询的关键字在查询结果中高亮显示出来

    #将查询的关键字在查询结果中高亮显示出来
    GET /movie_index/_search
    {
      "query": {
     ?  "match": {
     ? ?  "name":"river"
     ?  }
      },
      "highlight": {
     ?  "fields": {"name":{}}
      }
    }
    #查询结果中river高亮显示

4. 聚合操作

  1. 需要一:取出每个影员共参演了多少部电影

    #aggs  聚合操作的关键字
    #myaggs 聚合的名字,自己可以随意取名
    #聚合类型,这里选择terms
    #actorList.name.keyword 表示根据actorList.name分组,但是不分词
    GET /movie_index/_search
    {
      "aggs": {
     ?  "myaggs": {
     ? ?  "terms": {
     ? ? ?  "field": "actorList.name.keyword",
     ? ? ?  "size": 10
     ? ? ?  }
     ?  }
      }
    }

  2. 每个影员参演电影的平均分是多少,并按评分排序

    #
    GET /movie_index/_search
    {
      "aggs": {
     ?  "groupByName": {        #分组名
     ? ?  "terms": {
     ? ? ?  "field": "actorList.name.keyword",
     ? ? ?  "size": 10,
     ? ? ?  "order": {
     ? ? ? ?  "avg_score": "asc"        #这里的是在下面求的平均分拍升序
     ? ? ?  }
     ? ?  },
     ? ?  "aggs": {
     ? ? ?  "avg_score": {
     ? ? ? ?  "avg": {  #求平均值
     ? ? ? ? ?  "field": "doubanScore"      #求doubanScore字段的平均值
     ? ? ? ?  }
     ? ? ?  }
     ? ?  }
     ?  }
      }
    }
    ?
    #注意在json代码内部是不可以添加注释的,这里是为了方便注解

5. 分词

  1. 英文默认分词

    GET /_analyze
    {
      "text": "hello word"
    }

  2. 中文默认分词(不推荐使用)

    GET /_analyze
    {
      "text": "我是一个非常爱睡觉的人"
    }

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:39:36  更:2021-08-15 15:42:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:46:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码