溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

elk學(xué)習(xí)筆記-es-文檔及索引操作

發(fā)布時(shí)間:2020-09-13 01:40:08 來源:網(wǎng)絡(luò) 閱讀:211 作者:airya 欄目:系統(tǒng)運(yùn)維
常見術(shù)語

文檔 Document

  • 用戶存儲在es中的數(shù)據(jù)文檔,相當(dāng)于mysql數(shù)據(jù)表中的一行數(shù)據(jù)
索引 index
  • 由具有相同字段的文檔列表組成,相當(dāng)于mysql數(shù)據(jù)庫中的表,table
節(jié)點(diǎn) Node
  • 一個(gè)elasticsearch 的運(yùn)行實(shí)例,是集群的構(gòu)成單元。
集群 Cluster
  • 由一個(gè)或多個(gè)節(jié)點(diǎn)組成,對外提供服務(wù)
Document

Json Object,有字段(field)組成,常見數(shù)據(jù)類型如下:

  • 字符串:text,keyword
  • 數(shù)值型:long,integer,short,byte,double,float,scaled_float
  • 布爾:Boolean
  • 日期:date
  • 二進(jìn)制:binary
  • 范圍類型:integer_range,float_range,long_range,double_range,date_range

每個(gè)文檔都有一個(gè)唯一的ID標(biāo)識

  • 自行指定
  • es 自動生成

元數(shù)據(jù)(MetaData),用于標(biāo)注文檔相關(guān)信息

  • _index:文檔所在索引名
  • _type:文檔所在的類型名
  • _id:文檔唯一id
  • _uid:組合id,由_type和_id組成(6.x _type不再起作用,同_id一樣)
  • _source:文檔的原始Json數(shù)據(jù),可以從這里獲取每個(gè)字段的內(nèi)容
  • _all:整合所有字段內(nèi)容到該字段,默認(rèn)禁用
正排索引
  • 文檔ID到文檔內(nèi)容,單詞的關(guān)聯(lián)關(guān)系

elk學(xué)習(xí)筆記-es-文檔及索引操作

倒排索引
  • 單詞到文檔ID的關(guān)聯(lián)關(guān)系
    elk學(xué)習(xí)筆記-es-文檔及索引操作
    倒排索引-查詢流程
  • 通過倒排索引獲得"搜索引擎"對應(yīng)的文檔Id有1和3
  • 通過正排索引查詢1和3的完整內(nèi)容
  • 返回用戶最終結(jié)果
倒排索引-單詞詞典

單詞詞典(Term Dictionary)是倒排索引的重要組成

  • 記錄所有文檔的單詞,一般都比較大
  • 記錄單詞倒排列表的關(guān)聯(lián)信息
倒排索引-倒排列表

倒排列表( Posting List )記錄了單詞對應(yīng)的文檔集合,由倒排索引項(xiàng)( Posting )組成

倒排索引項(xiàng)( Posting )主要包含如下信息:

  • 文檔Id ,用于獲取原始信息
  • 單詞頻率( TF, Term Frequency) , 記錄該單詞在該文檔中的出現(xiàn)次數(shù),用于后續(xù)相關(guān)性算分
  • 位置( Position) ,記錄單詞在文檔中的分詞位置(多個(gè)) , 用于做詞語搜索
  • 偏移(Offset),記錄單詞在文檔的開始和結(jié)束位置,用于做高亮顯示
Index

索引中存儲具有相同結(jié)構(gòu)的文檔(Document)

  • 每個(gè)索引都有自己的mapping 定義,用于定義字段名和類型

一個(gè)集群可以有多個(gè)索引,比如:

  • nginx 日志存儲的時(shí)候可以按照日期每天生成一個(gè)索引來存儲
    nginx-log-2019-01-01
    nginx-log-2019-01-02
    nginx-log-2019-01-03

創(chuàng)建索引與寫入數(shù)據(jù)

Rest API ()

Elasticsearch 集群對外提供RESTful API

  • REST(REpresentational State Transfer)表現(xiàn)層狀態(tài)轉(zhuǎn)移(對資源進(jìn)行操作狀態(tài)會發(fā)生變化)
  • URL指定資源,如Index,Document
  • Http Method 指定資源操作類型,如GET,POST,PUT,DELETE
兩種交互方式
  • Curl 命令行
    elk學(xué)習(xí)筆記-es-文檔及索引操作
  • Kibana DevTools

elk學(xué)習(xí)筆記-es-文檔及索引操作

索引 API

es有專門的Index API,用于創(chuàng)建,更新,刪除索引配置等

  • 創(chuàng)建索引API
PUT /test_index

elk學(xué)習(xí)筆記-es-文檔及索引操作

  • 查看現(xiàn)有索引
    GET_cat/indices

    elk學(xué)習(xí)筆記-es-文檔及索引操作

    文檔 Document API

es有專門的 Document API

  • 創(chuàng)建文檔
  • 查詢文檔
  • 更新文檔
  • 刪除文檔
創(chuàng)建文檔:

指定文檔ID創(chuàng)建文檔:

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

elk學(xué)習(xí)筆記-es-文檔及索引操作

不指定ID創(chuàng)建文檔:
POST /test1_index/doc
{
  "username":"kibana",
  "version":6.1
}

elk學(xué)習(xí)筆記-es-文檔及索引操作

查詢文檔
  • 指定要查詢文檔的ID
    GET /test_index/doc/1  

    elk學(xué)習(xí)筆記-es-文檔及索引操作

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

    elk學(xué)習(xí)筆記-es-文檔及索引操作

批量創(chuàng)建文檔API

es允許一次操作多個(gè)文檔(增刪改查,create創(chuàng)建文檔,如果文檔已經(jīng)存在就會報(bào)錯。index創(chuàng)建文檔,如果存在就會覆蓋。)

  • 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, //查詢耗時(shí),單位ms
    "errors": false,    //返回結(jié)果,正確或錯誤
    "items": [   //每個(gè)操作返回的結(jié)果
    {
      "index": {
        "_index": "test_index",
        "_type": "doc",
        "_id": "3",
        "_version": 1,
        "result": "created",    //創(chuàng)建
        "_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,如下:(并且可以在一個(gè)_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學(xué)習(xí)筆記-es-文檔及索引操作

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI