elk学习笔记-es-文档及索引操作

常见术语

文档 Document

  • 用户存储在es中的数据文档,相当于mysql数据表中的一行数据
索引 index
  • 由具有相同字段的文档列表组成,相当于mysql数据库中的表,table
节点 Node
  • 一个elasticsearch 的运行实例,是集群的构成单元。
集群 Cluster
  • 由一个或多个节点组成,对外提供服务
Document

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

  • 字符串:text,keyword
  • 数值型:long,integer,short,byte,double,float,scaled_float
  • 布尔:Boolean
  • 日期:date
  • 二进制:binary
  • 范围类型:integer_range,float_range,long_range,double_range,date_range

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

  • 自行指定
  • es 自动生成

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

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

正排索引

  • 文档ID到文档内容,单词的关联关系

elk学习笔记-es-文档及索引操作

倒排索引
  • 单词到文档ID的关联关系
    elk学习笔记-es-文档及索引操作

    倒排索引-查询流程

  • 通过倒排索引获得"搜索引擎"对应的文档Id有1和3
  • 通过正排索引查询1和3的完整内容
  • 返回用户最终结果

倒排索引-单词词典

单词词典(Term Dictionary)是倒排索引的重要组成

  • 记录所有文档的单词,一般都比较大
  • 记录单词倒排列表的关联信息

倒排索引-倒排列表

倒排列表( Posting List )记录了单词对应的文档集合,由倒排索引项( Posting )组成

倒排索引项( Posting )主要包含如下信息:

  • 文档Id ,用于获取原始信息
  • 单词频率( TF, Term Frequency) , 记录该单词在该文档中的出现次数,用于后续相关性算分
  • 位置( Position) ,记录单词在文档中的分词位置(多个) , 用于做词语搜索
  • 偏移(Offset),记录单词在文档的开始和结束位置,用于做高亮显示

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)表现层状态转移(对资源进行操作状态会发生变化)
  • URL指定资源,如Index,Document
  • Http Method 指定资源操作类型,如GET,POST,PUT,DELETE
两种交互方式
  • Curl 命令行
    elk学习笔记-es-文档及索引操作
  • Kibana DevTools

elk学习笔记-es-文档及索引操作

索引 API

es有专门的Index API,用于创建,更新,删除索引配置等

  • 创建索引API
PUT /test_index

elk学习笔记-es-文档及索引操作

  • 查看现有索引
    GET_cat/indices

    elk学习笔记-es-文档及索引操作

    文档 Document API

es有专门的 Document API

  • 创建文档
  • 查询文档
  • 更新文档
  • 删除文档

创建文档:

指定文档ID创建文档:

PUT /test_index/doc/1
{
  "username":"kibana",
  "version":6.1
}

elk学习笔记-es-文档及索引操作

不指定ID创建文档:
POST /test1_index/doc
{
  "username":"kibana",
  "version":6.1
}

elk学习笔记-es-文档及索引操作

查询文档

  • 指定要查询文档的ID
    GET /test_index/doc/1  

    elk学习笔记-es-文档及索引操作

  • 搜索所有文档:_search
    GET /test_index/doc/_search  //不指定条件查找
    GET /test_index/doc/_search
    {
    "query": {
    "term":{
      "_id":"1" //指定条件,查找ID为1的文档
    }
    }
    }

    elk学习笔记-es-文档及索引操作

批量创建文档API

es允许一次操作多个文档(增删改查,create创建文档,如果文档已经存在就会报错。index创建文档,如果存在就会覆盖。)

  • endpoint 为 _bulk,如下:
    POST _bulk
    {"index":{"_index":"test_index","_type":"doc","_id":"3"}}
    {"username":"zabbix","version":4}
    {"delete":{"_index":"test_index","_type":"doc","_id":"1"}}
    {"update":{"_id":"4","_index":"test_index","_type":"doc"}}
    {"doc":{"es":"5.0"}}

    输出:

    {
    "took": 979, //查询耗时,单位ms
    "errors": false,    //返回结果,正确或错误
    "items": [   //每个操作返回的结果
    {
      "index": {
        "_index": "test_index",
        "_type": "doc",
        "_id": "3",
        "_version": 1,
        "result": "created",    //创建
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 0,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "delete": {
        "_index": "test_index",
        "_type": "doc",
        "_id": "1",
        "_version": 2,
        "result": "deleted",    //删除
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 1,
        "_primary_term": 1,
        "status": 200
      }
    },
    {
      "update": {
        "_index": "test_index",
        "_type": "doc",
        "_id": "4",
        "_version": 2,
        "result": "updated",    //更改
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 3,
        "_primary_term": 1,
        "status": 200
      }
    }
    ]
    }

    批量查询文档

  • endpoint 为_mget,如下:(并且可以在一个_mget下获取不同索引的文档)
GET /_mget    //查找在test_index索引,id为4和1的文档.
{
  "docs":[    //指明要查询的文档id
    {
      "_index":"test_index",
      "_type":"doc",
      "_id":"4"
    },
    {
      "_index":"test_index",
      "_type":"doc",
      "_id":"2"
    }
  ]
}
返回
{
  "docs": [
    {
      "_index": "test_index",
      "_type": "doc",
      "_id": "4",
      "_version": 2,
      "found": true,
      "_source": {
        "username": "es",
        "version": 6.1,
        "es": "5.0"
      }
    },
    {
      "_index": "test_index",
      "_type": "doc",
      "_id": "2",
      "_version": 1,
      "found": true,
      "_source": {
        "username": "zabbix",
        "version": 4.2
      }
    }
  ]
}

欢迎加入
elk学习笔记-es-文档及索引操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章