Elasticsearch索引(company)_Centos下CURL增刪改

目錄

  返回目錄:http://www.cnblogs.com/hanyinglong/p/5464604.htmlhtml

1.Elasticsearch索引說明

  a. 經過上面幾篇博客已經將Elasticsearch的安裝配置以及基本概念和通訊方式基本瞭解了,當了解完這些內容以後,繼而就能夠去使用它,學習它,也應用在項目中,從這篇博客開始將使用一個簡單的教程來學習Elasticsearch,經過此教程,但願可讓你們對Elasticsearch能作的事以及易用程度有了解而且可使用它,至於更加深層次的內容,歡迎你們去嘗試。數據庫

  b. 咱們之前面的實體對象爲(Employee,在第二章中有定義其實體類)來講明整個教程,既然存在實體類了,那麼首先要將公司員工的數據存儲下來,每一個文檔表明一個員工,在Elasticsearch中存儲數據的行爲就叫作索引(indexing),不過在索引以前,咱們須要明確數據應該存儲在哪裏。api

    b.1 在Elasticsearch中,文檔屬於一種類型(Type(Employee)),而這些類型存在於索引中(Index(Company)),以下數據庫和Elasticsearch的存儲結構的對比,可使用它們來理解Elasticsearch的存儲結構數據結構

      (1)  Relational DB(關係型數據庫)——>Databases(數據庫(Company))——>Tables(表(Employee))——>Rows(行)——>Colums(列)(後面兩個對屬性的描述)curl

      (2)  Elasticsearch——>Indices——>Types——>Documents——>Fieldside

      備註:Elasticsearch集羣能夠包含多個索引(Indices)(數據庫),每個索引能夠包含多個類型(Types)(表),每個類型包含多個文檔(Documents)(行),而後每一個文檔包含多個字段(Fields)(列),能夠和咱們的關係型數據庫互相參考理解。學習

  c. 在Elasticsearch中,咱們常常提到索引,可是你發現你很難理解它的索引究竟是什麼?這是由於索引(Index)在Elasticsearch中有着不一樣的含義,在這裏簡單區分一下:測試

    c.1 索引(名詞)  一個索引(Index)就像四號傳統關係數據庫中的數據庫,它是相關文檔存儲的地方,index的複數是indices或者indexes。url

    c.2 索引(動詞)  索引一個文檔,表示把一個文檔存儲到索引裏,以便它能夠被檢索。spa

    c.3 倒排索引 傳統關係型數據庫爲特定的列增長一個索引來加速檢索,Elasticsearch和Lucene使用一種叫作倒排索引(Inverted index)的數據結構來達到相同的目的。

  d. 默認狀況下,Elasticsearch文檔中的全部字段都會被索引(擁有一個倒排索引),只有這樣能夠加速他們的快速搜索。

  e. 接下來讓咱們創建一個公司員工索引,爲了建立這個員工索引,咱們將進行一下動做

    e.1 爲每一個員工的文檔(Document)創建索引,每一個文檔包含了相關員工的全部信息。

    e.2 每一個文檔的類型是employee,employee類型歸屬於索引company,company索引儲存在Elasticsearch集羣中。

  f.下面咱們進行增刪改索引的操做。

2.Elasticsearch建立索引文檔(初始化)

  a. 文檔經過index api被索引,使數據能夠被儲存和搜索,正如前面咱們所述,文檔經過其_index、_type、_id惟一肯定,前面的_index和_type須要咱們本身定義,而_id咱們能夠本身定義也可使用index api爲咱們生成一個默認的,建立索引的語法是:

    curl -XPUT 'http://192.168.37.133:9200/ {index} / {type} / {id}?pretty' -d '{

      "field":"value"

    }'

    a.1 從語法中咱們看到path:/{index}/{type}/{id}?pretty包含四部份內容,index:索引名,type:類型名,id:這個公司員工的Id,pretty的意思是返回使用JSON,它不須要你作額外的管理工做,好比建立索引或者定義每一個字段的數據類型,可以直接索引文檔,Elasticsearch已經內置了全部的缺省設置,全部管理操做都是透明的。

  b. 使用本身的Id

    b.1 若是你的文檔有天然的標識符(相似於數據庫中的主鍵)(例如Employee中的Id),你就能夠提供本身的_id,例如,咱們添加一條數據,索引名叫company,類型名叫employee,Id爲:e449576b-2125-49e2-99ee-5985212cf502,那麼這個索引的請求和返回以下所示:

     

    備註:如上圖所示:響應指出請求的索引已經被成功建立,這個索引中包含了_index、_type、_id元數據、_version。Elasticsearch中每一個文檔都有版本號,每當文檔變化的時候(包括刪除)都會使_version增長。

  c. 系統自增Id

    c.1 若是咱們的數據沒有自增Id,可讓Elasticsearch自動爲數據生成,請求結構發生了變化:將PUT方法換成POST方法。而URL中如今只須要包含_index和_type兩個字段。再添加一條數據,以下圖所示:

    

    備註:自動生成的ID有22個字符長,URL-safe, Base64-encoded string universally unique identifiers, 或者叫UUIDs。

  d. 到這裏咱們將建立索引已經完成。接下來便闡述在索引增改刪文檔。咱們建立了一個索引爲company,類型爲employee的索引庫

3.Elasticsearch建立文檔

  a. 從第二步咱們已經建立了索引和類型,那麼接下來咱們就須要建立新的文檔了,其實在上面也已經有所說明,可是這裏還存在一些問題,故而劃出來一個節點簡單說明一下

  b. 當索引一個文檔的時候,咱們如何肯定是徹底建立了一個新的仍是覆蓋了一個已經存在的索引呢?須要咱們記住_index、_type、_id三者惟一肯定一個文檔,因此要想保證文檔是新加入的,最簡單的方式就是使用POST方法讓Elasticsearch自動生成惟一的_Id(這樣保證了每次的_id都是不一樣的),然而若是咱們想使用自定義的_id,就必須告訴Elasticsearch應該在_index、_type、_id三者都不一樣時才能接受請求,爲了作到這點,有如下兩種方式來實現:

    b.1 使用op_type參數(語法以下):

      curl -XPUT 'http://192.168.37.133:9200/company/employee/22dd91d9-e92d-4fe7-a5e0-48fbbdd130f7?op_type=create&pretty' -d '{

        實體對象:(實體對象(字段和上面截圖一致),字段定義的值從新寫(方便後面查詢))
      }'

    b.2  直接在URL後面添加_create特性

      curl -XPUT 'http://192.168.37.133:9200/company/employee/fc6304c9-a257-4920-a756-f02fee7ac157/_create?pretty' -d '{

        實體對象:(實體對象(字段和上面截圖一致),字段定義的值從新寫(方便後面查詢))

      }'

    備註:若是請求成功的建立了一個新的文檔,Elasticsech將會返回正常的元數據而且建立狀態Created:true。

  c. 固然,若是包含相同的_index、_type、_id的文檔已經存在,Elasticsearch將返回409的響應狀體,並且提示錯誤也很是明顯,以下圖所示:

   

  d. 到這裏咱們已經對索引添加文檔的兩種狀況進行了說明,而此時索引庫裏面咱們已經寫入了幾條語句,這時候咱們再次多錄入幾條數據來進行後面的測試。

4.Elasticsearch更新整個文檔

  a. 從上面能夠看到咱們已經爲Elasticsearch建立了索引而且添加了部分文檔數據,那麼當含有數據以後,咱們就將會對數據進行更新和刪除,這裏咱們來簡單說一下Elasticsearch更新整個文檔,後面咱們還會說Elasticsearch局部更新。

  b. 文檔在Elasticsearch中是不可變的,也就是當咱們對Elasticsearch錄入數據以後,咱們不能修改他們,若是咱們須要更新已存在的文檔,可使用前面提到的index API重建索引或者替換掉它,換言之則是從就文檔中檢索出來數據以後修改它,而後刪除舊的文檔,從新索引新的文檔。

    b.1 從上面圖片中咱們能夠看到Elasticseach中含有一個叫《羊七》的用戶,咱們修改它的名字爲《羊癲瘋》,愛好爲《報紙,代碼,寫做》,是否正式員工爲《true》,帳戶下的Email爲《yangdianfeng@live.cn》,如圖所示(和上面的圖片內容進行對比):

   

  c. 剖析上圖內容:

    c.1 從上圖中能夠看到在響應中Elasticsearch把_version增長了,說明修改已經成功,關於_version後面會專門有一篇文章去說,它是關於Elasticsearch版本控制的。

    c.2 created標識爲false,是由於同索引、同類型下已經存在同Id的文檔,你們千萬不要看到created爲false就覺得修改失敗了。根本版本增加特性_version得知它已經修改爲功了。

    c.3 經過上面的修改命令以後,在Elasticsearch內部已經標記就文檔爲刪除而且添加了一個完整的新文檔,固然舊版本不會當即消失,可是你也沒法訪問它,Elasticsearch會在特定的狀況下刪除它。

    c.4 後面將會在《局部更新》中探討update API,這個API容許修改文檔的局部內容,但事實上Elasticsearch執行過程與以前所說的過程一致:從原文檔中檢索到須要修改的數據,修改它,刪除原來的文檔,索引新的文檔,惟一不一樣的就是update API完成這個過程只須要一個客戶端請求便可,不在須要get和index請求了。

  d. 上面說Elasticsearch被標識爲刪除以後不是當即刪除,而是在特定的狀況下刪除它,那麼這個特定的狀況是:Elasticsearch會有後臺線程根據Lucene的合併規則按期進行segment merging合併操做,通常不須要用戶擔憂或者採起任何行動,被刪除的文檔在segment合併時,纔會真正刪除掉,再次以前,它任然會佔用着JVM heap和操做系統的文件cache等資源。

4.Elasticsearch刪除文檔

  a. 刪除文檔的語法與以前的基本一致,只不過要使用DELETE方法:語法以下:

    curl -XDELETE 'http://192.168.37.133:9200/company/employee/AVRksJ2CE1KWUdOka6rK/?pretty

  b. 執行上面命令以後,若是文檔被找到,Elasticsearch將返回如圖所示的狀態信息以及響應體,注意_version的數字變化,若是沒有找到,將獲得found爲false的響應體

    

  c. 若是你連續執行文檔不存在的命令,發現儘管文檔不存在(found爲false),可是_version的值仍是增長了,這是內部記錄的一部分,它確保了在多個節點間不一樣操做能夠有正確的順序

  d. 正如在更新整個文檔中提到的同樣,刪除一個文檔也不會當即從磁盤上移除,它只是被標記成已刪除。Elasticsearch將會在特定的狀況下進行刪除,特定狀況參考修改中的說明。


  經過這篇文章,咱們瞭解了ELasticsearch是如索引以及使用CURL建立增刪改索引文檔的,下篇博客咱們將簡單來講一下使用CURL查詢索引文檔。

 

        天天一點點都是進步

             若是文章哪裏存在問題,歡迎你們指出來,我會在第一時間修改。

相關文章
相關標籤/搜索