千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,常见术语文档 Document用户存储在es中的数据文档,相当于mysql数据表中的一行数据索引 index由具有相同字段的文档列表组成,相当于mysql数据库中的表,table节点 Node一个el
千家信息网最后更新 2025年01月23日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到文档内容,单词的关联关系

倒排索引
  • 单词到文档ID的关联关系
    倒排索引-查询流程
  • 通过倒排索引获得"搜索引擎"对应的文档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 命令行
  • Kibana DevTools

索引 API

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

  • 创建索引API
PUT /test_index

  • 查看现有索引
    GET_cat/indices

    文档 Document API

es有专门的 Document API

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

指定文档ID创建文档:

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

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

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

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

批量创建文档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      }    }  ]}

欢迎加入

0