溫馨提示×

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

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

增刪改查 elasticsearch中的文檔API 的使用

發(fā)布時(shí)間:2020-07-09 12:06:44 來源:網(wǎng)絡(luò) 閱讀:11201 作者:cuizhiliang 欄目:數(shù)據(jù)庫(kù)

文檔為何物?一個(gè)對(duì)象 就相當(dāng)于mysql的一個(gè)record記錄


【文檔】

什么是文檔?


程序中大多的實(shí)體或?qū)ο竽軌虮恍蛄谢癁榘I值對(duì)的JSON對(duì)象,鍵(key)是字段(field)或?qū)傩?property)的名字,值(value)可以是字符串、數(shù)字、布爾類型、另一個(gè)對(duì)象、值數(shù)組或者其他特殊類型,比如表示日期的字符串或者表示地理位置的對(duì)象。

{
    "name":         "John Smith",
    "age":          42,
    "confirmed":    true,
    "join_date":    "2014-06-01",
    "home": {
        "lat":      51.5,
        "lon":      0.1
    },
    "accounts": [
        {
            "type": "facebook",
            "id":   "johnsmith"
        },
        {
            "type": "twitter",
            "id":   "johnsmith"
        }
    ]
}

通常,我們可以認(rèn)為對(duì)象(object)和文檔(document)是等價(jià)相通的。不過,他們還是有所差別:對(duì)象(Object)是一個(gè)JSON結(jié)構(gòu)體——類似于哈希、hashmap、字典或者關(guān)聯(lián)數(shù)組;對(duì)象(Object)中還可能包含其他對(duì)象(Object)。 在Elasticsearch中,文檔(document)這個(gè)術(shù)語(yǔ)有著特殊含義。它特指最頂層結(jié)構(gòu)或者根對(duì)象(root object)序列化成的JSON數(shù)據(jù)(以唯一ID標(biāo)識(shí)并存儲(chǔ)于Elasticsearch中)。

文檔元數(shù)據(jù)


一個(gè)文檔不只有數(shù)據(jù)。它還包含了元數(shù)據(jù)(metadata)——關(guān)于文檔的信息。三個(gè)必須的元數(shù)據(jù)節(jié)點(diǎn)是:

節(jié)點(diǎn)說明

_index文檔存儲(chǔ)的地方

_type文檔代表的對(duì)象的類

_id文檔的唯一標(biāo)識(shí)

_index


索引(index)類似于關(guān)系型數(shù)據(jù)庫(kù)里的“數(shù)據(jù)庫(kù)”——它是我們存儲(chǔ)和索引關(guān)聯(lián)數(shù)據(jù)的地方。

提示:


事實(shí)上,我們的數(shù)據(jù)被存儲(chǔ)和索引在分片(shards)中,索引只是一個(gè)把一個(gè)或多個(gè)分片分組在一起的邏輯空間。然而,這只是一些內(nèi)部細(xì)節(jié)——我們的程序完全不用關(guān)心分片。對(duì)于我們的程序而言,文檔存儲(chǔ)在索引(index)中。剩下的細(xì)節(jié)由Elasticsearch關(guān)心既可。

我們將會(huì)在《索引管理》章節(jié)中探討如何創(chuàng)建并管理索引,但現(xiàn)在,我們將讓Elasticsearch為我們創(chuàng)建索引。我們唯一需要做的僅僅是選擇一個(gè)索引名。這個(gè)名字必須是全部小寫,不能以下劃線開頭,不能包含逗號(hào)。讓我們使用website做為索引名。

_type


在應(yīng)用中,我們使用對(duì)象表示一些“事物”,例如一個(gè)用戶、一篇博客、一個(gè)評(píng)論,或者一封郵件。每個(gè)對(duì)象都屬于一個(gè)類(class),這個(gè)類定義了屬性或與對(duì)象關(guān)聯(lián)的數(shù)據(jù)。user類的對(duì)象可能包含姓名、性別、年齡和Email地址。

在關(guān)系型數(shù)據(jù)庫(kù)中,我們經(jīng)常將相同類的對(duì)象存儲(chǔ)在一個(gè)表里,因?yàn)樗鼈冇兄嗤慕Y(jié)構(gòu)。同理,在Elasticsearch中,我們使用相同類型(type)的文檔表示相同的“事物”,因?yàn)樗麄兊臄?shù)據(jù)結(jié)構(gòu)也是相同的。+


每個(gè)類型(type)都有自己的映射(mapping)或者結(jié)構(gòu)定義,就像傳統(tǒng)數(shù)據(jù)庫(kù)表中的列一樣。所有類型下的文檔被存儲(chǔ)在同一個(gè)索引下,但是類型的映射(mapping)會(huì)告訴Elasticsearch不同的文檔如何被索引。 我們將會(huì)在《映射》章節(jié)探討如何定義和管理映射,但是現(xiàn)在我們將依賴Elasticsearch去自動(dòng)處理數(shù)據(jù)結(jié)構(gòu)。

_type的名字可以是大寫或小寫,不能包含下劃線或逗號(hào)。我們將使用blog做為類型名。

_id


id僅僅是一個(gè)字符串,它與_index和_type組合時(shí),就可以在Elasticsearch中唯一標(biāo)識(shí)一個(gè)文檔。當(dāng)創(chuàng)建一個(gè)文檔,你可以自定義_id,也可以讓Elasticsearch幫你自動(dòng)生成。

其它元數(shù)據(jù)


還有一些其它的元數(shù)據(jù),我們將在《映射》章節(jié)探討。使用上面提到的元素,我們已經(jīng)可以在Elasticsearch中存儲(chǔ)文檔并通過ID檢索——換言說,把Elasticsearch做為文檔存儲(chǔ)器使用了。

[索引]

基于HTTP協(xié)議,以JSON為數(shù)據(jù)交互格式的RESTful API

其他所有程序語(yǔ)言都可以使用RESTful API,通過9200端口的與Elasticsearch進(jìn)行通信,你可以使用你喜歡的WEB客戶端,事實(shí)上,如你所見,你甚至可以通過curl命令與Elasticsearch通信。

NOTE

Elasticsearch官方提供了多種程序語(yǔ)言的客戶端——Groovy,Javascript, .NET,PHP,Perl,Python,以及 Ruby——還有很多由社區(qū)提供的客戶端和插件,所有這些可以在文檔中找到。

向Elasticsearch發(fā)出的請(qǐng)求的組成部分與其它普通的HTTP請(qǐng)求是一樣的:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

  • VERB HTTP方法:GETPOSTPUTHEADDELETE

  • PROTOCOL http或者h(yuǎn)ttps協(xié)議(只有在Elasticsearch前面有https代理的時(shí)候可用)

  • HOST Elasticsearch集群中的任何一個(gè)節(jié)點(diǎn)的主機(jī)名,如果是在本地的節(jié)點(diǎn),那么就叫l(wèi)ocalhost

  • PORT Elasticsearch HTTP服務(wù)所在的端口,默認(rèn)為9200

  • PATH API路徑(例如_count將返回集群中文檔的數(shù)量),PATH可以包含多個(gè)組件,例如_cluster/stats或者_(dá)nodes/stats/jvm

  • QUERY_STRING 一些可選的查詢請(qǐng)求參數(shù),例如?pretty參數(shù)將使請(qǐng)求返回更加美觀易讀的JSON數(shù)據(jù)

  • BODY 一個(gè)JSON格式的請(qǐng)求主體(如果請(qǐng)求需要的話)

舉例說明,為了計(jì)算集群中的文檔數(shù)量,我們可以這樣做:

curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'


如:返回所有節(jié)點(diǎn)jvm信息

curl -i 127.0.0.1:9200/_nodes/stats/jvm?pretty


API-RESTful API


參考:

http://www.learnes.net/data/README.html


curl 192.168.100.10:9200?preety
curl 192.168.100.10:9200/_count?pretty


shell 中的curl的用法

-X 指定請(qǐng)求方法默認(rèn)是  -XGET

-i 返回?cái)?shù)據(jù)的時(shí)候,也一并返回請(qǐng)求結(jié)果

-d 發(fā)送的數(shù)據(jù)



查看elk的狀態(tài):

curl 192.168.100.10:9200/_cluster/health?pretty



這個(gè)返回值意味著我們的索引請(qǐng)求已經(jīng)被成功創(chuàng)建,其中還包含了_index, _type以及_id的元數(shù)據(jù),以及一個(gè)新的元素_version

_index 名詞就是相當(dāng)于數(shù)據(jù)庫(kù)中庫(kù)

_type 相當(dāng)于數(shù)據(jù)庫(kù)中的表

_id 就是id(可以自己指定也以自增)


_index 和 _type 和 _id 三者組成elasticsearch存儲(chǔ)中的數(shù)據(jù)的唯一


創(chuàng)建一條

curl -XPUT 192.168.100.10:9200/website/blog/123 -d '{
"title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2016/01/01"
 }'



 可以看到搜索到了當(dāng)時(shí)創(chuàng)建的文檔

[root@master ~]# curl 192.168.100.10:9200/website/blog/123?pretty 
{
  "_index" : "website",
  "_type" : "blog",
  "_id" : "123",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "title" : "My first blog entry",
    "text" : "Just trying this out...",
    "date" : "2014/01/01"
  }
}

每找到的情況:

[root@master ~]# curl 192.168.100.10:9200/website/blog/1235?pretty
{
  "_index" : "website",
  "_type" : "blog",
  "_id" : "1235",
  "found" : false
}


_source 是文檔的內(nèi)容??梢灾付ㄖ捣祷匚臋n指定的字段

[root@master ~]# curl -i -XGET "192.168.100.10:9200/logstash-2016.05.12/syslog/AVSlIBy3bzztddJUaGzh?_source=file,meesage&pretty"
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 185
{
  "_index" : "logstash-2016.05.12",
  "_type" : "syslog",
  "_id" : "AVSlIBy3bzztddJUaGzh",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "file" : "/var/log/messages"
  }
}



一次獲取多個(gè)文檔_mget

[root@master ~]# curl -i -XGET 192.168.100.10:9200/logstash-2016.05.12/syslog/_mget?pretty -d '{"ids": [ "2",  "1"]}'  
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 230
{
  "docs" : [ {
    "_index" : "logstash-2016.05.12",
    "_type" : "syslog",
    "_id" : "2",
    "found" : false
  }, {
    "_index" : "logstash-2016.05.12",
    "_type" : "syslog",
    "_id" : "1",
    "found" : false
  } ]
}



索引多了會(huì)積累需要定時(shí)刪除比如刪除一個(gè)月之前的,(不能使用rm -rf 刪除data下面的索引目錄,因?yàn)閑lk是分布式的你輸出了,其他節(jié)點(diǎn)的復(fù)制分片又會(huì)同步過來)

# 刪除indices

curl -XDELETE "http://localhost:9200/access-log-2016.12.02/"


# 刪除多個(gè)indices

curl -XDELETE "http://localhost:9200/access-log-2015.12.*/"


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

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

AI