Elasticsearch 之入门

术语介绍

  • 文档 Document:用户存储在es 中的数据文档,es中存储的最小单元,类似于MySQL表中的一行数据
  • 索引 Index:由具有相同字段的文档列表组成,表示一个文档的集合,类似于table,在6.0后一个Index下只有一个type。(在6后的版本会把type去除)
  • 节点 Node:一个Elasticsearch的运行实例,是集群的构成单元
  • 集群 Cluster:由一个或多个节点组成,对外提供服务

Document

Json Object,由字段(Field)组成,常见数据类型如下:

  • 字符串:text, keyword

  • 数值型:long, integer, short, byte, double, float, half_float, scaled_float

  • 布尔:boolean

  • 日期:date

  • 二进制:binary

  • 范围类型:integer_range, float_range, long_range, double_range, date_range

每一个文档都有唯一的id标识

  • 自行指定
  • es自动生成

Demo

93.180.71.3 --[17/May/2019:08:21:02 +0000] "GET/downloads/product_1 HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"

以上日志记录到es 后:

{
"remote_ip":"93.180.71.3",
"user_name":"-",
"@timestamp":"2019-05-17T08:21:02.000Z",
"request_action":"GET",
"request":"/downloads/product_1",
"http_version":"1.1",
"response":"304",
"bytes":"0",
"referrer":"-",
"agent":"Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"
}

MetaData(元数据),用于标注文档的相关信息

  • _index:文档所在的索引名
  • _type:文档所在的类型名
  • _id:文档唯一id
  • _uid:组合id,由 _type和 _id组成(6.x _type不再起作用,这里同_id一样)
  • _source:文档的原始Json数据,可以从这里获取每个字段的内容
  • _all:整合所有字段内容到该字段,默认禁用(很占磁盘空间)

Index

  • 索引中存储具有相同结构的文档(Document);每个索引都有自己的mapping定义,用于定义字段名和类型
  • 一个集群可以有多个索引,比如:nginx日志存储的时候可以按照日期每天生成一个索引来存储
    – nginx-log-2019-01-01
    – nginx-log-2019-01-02
    – nginx-log-2019-01-03

如何创建索引和写入数据

Rest API

Elasticsearch 集群对外提供 RESTful API

  • REST – REpresentational State Transfer
  • URI 指定资源,如 Index、Document 等
  • Http Method 指明资源操作类型,如 GET、POST、PUT、DELETE等

常用两种交互方式

  • Curl 命令行

    curl -X PUT 'http://localhost:9200/employee/doc/1' -i -H "Content-Type: application/json" -d '{
    "username": "bear"
    "job": "php"
    }'
    
  • Kibana DevTools
    在这里插入图片描述

Index API

用于创建、更新、删除索引配置等

  • 创建索引如下:

    PUT /user_index
    

    在这里插入图片描述

  • 查看现有索引

    GET _cat/indices
    

    在这里插入图片描述

  • 删除索引如下:

    DELETE /user_index
    

    在这里插入图片描述

Document API

Elasticsearch 有专门的 Document API

  • 创建文档
    1、指定 id 创建文档(【创建文档时,如果索引不存在,es会自动创建对应的index(test_index)和type(doc)】

     PUT /test_index/doc/1
     {
      "username": "bear",
      "job": "php"
     }
    

    在这里插入图片描述
    2、不指定 id 创建文档

    POST /test_index/doc
    {
      "username": "tom",
      "job": "java"
    }
    

    在这里插入图片描述
    3、批量创建文档API — es允许一次创建多个文档,从而减少网络传输开销,提升写入速率;-endpoint为【_bulk】,bulk 每一行都是一个Json,第一行指定了操作的原始信息,如下:
    其中:【index(创建文档当文档已存在会覆盖)、create(创建文档当文档已存在会报错)、delete、update】属于action_type(操作要做什么)

    POST _bulk
    {"index":{"_index":"test_index","_type":"doc","_id":"2"}}
    {"username":"hebe","job":"web"}
    {"delete":{"_index":"test_index","_type":"doc","_id":"1"}}
    {"update":{"_index":"test_index","_type":"doc","_id":"2"}}
    {"doc":{"job":"web-vue"}}
    
     POST my_index/doc/_bulk
    {
      "index":{
        "_id": "1"
      }
    }
    {
      "username": "alfred way",
      "job": "java",
      "age": 18,
      "birth": "1990-02-02",
      "isMarried": false
    }
    {
      "index":{
        "_id": "2"
      }
    }
    {
      "username": "alfred",
      "job": "java and php specialist",
      "age": 28,
      "birth": "1990-02-02",
      "isMarried": true
    }
    
    返回信息:
    {
      "took": 21,
      "errors": false, //批量操作是否成功
      "items": [ //每个bulk操作的返回结果
        {
          "index": {
            "_index": "test_index",
            "_type": "doc",
            "_id": "2",
            "_version": 1,
            "result": "created",
            "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
            },
            "created": true,
            "status": 201
          }
        },
        {
          "delete": {
            "found": true,
            "_index": "test_index",
            "_type": "doc",
            "_id": "1",
            "_version": 2,
            "result": "deleted",
            "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
            },
            "status": 200
          }
        },
        {
          "update": {
            "_index": "test_index",
            "_type": "doc",
            "_id": "2",
            "_version": 2,
            "result": "updated",
            "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
            },
            "status": 200
          }
        }
      ]
    }
    
  • 查询文档
    1、指定要查询的文档id

    GET /test_index/doc/1
    

    查询存在时:其中【_source存储了文档完整的原始数据】
    在这里插入图片描述
    查询未找到时:
    在这里插入图片描述
    2、搜索所有文档,用到【_search】,查询语句,Json格式,放在http_body中发送到es:

    GET /test_index/doc/_search
    {
     "query":{
        "term":{
           "_id":"1"
         }
      }
    }
    

    took
    返回说明:

    {
      "took": 3, //查询耗时,单位ms
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1, //符合条件的总文档数
        "max_score": 1,
        "hits": [ //返回的文档详情数据数组,默认前10个文档
          {
            "_index": "test_index", //索引名
            "_type": "doc",
            "_id": "1", //文档id
            "_score": 1, //文档的得分
            "_source": { //文档详情
              "username": "bear",
              "job": "php"
            }
          }
        ]
      }
    }
    

    3、批量查询文档API — es允许一次查询多个文档;-endpoint为【_mget】,可获取不同 index 的文档,如下:

    GET /_mget
    {
     "docs":[
      {
       "_index":"test_index",
       "_type":"doc",
       "_id":"1"
      },
      {
       "_index":"test_index",
       "_type":"doc",
       "_id":"2"
      }
     ]
    }
    

    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值