elasticsearch之簡單使用

elasticsearch之簡單使用

一、elasticsearch基本概念
在Elasticsearch中存儲數據的行爲就叫做索引(indexing),不過在索引之前,我們需要明確數據應該存儲在哪裏。
在Elasticsearch中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中,我們可以畫一些簡單的對比圖來類比傳統關係型數據庫:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields
Elasticsearch集羣可以包含多個索引(indices)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然後每個文檔包含多個字段(Fields)(列)。
基於HTTP協議,以JSON爲數據交互格式的RESTful API
其他所有程序語言都可以使用RESTful API,通過9200端口的與Elasticsearch進行通信,你可以使用你喜歡的WEB客戶端,事實上,如你所見,你甚至可以通過curl命令與Elasticsearch通信。
向Elasticsearch發出的請求的組成部分與其它普通的HTTP請求是一樣的:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
  • VERB HTTP方法:GETPOSTPUTHEADDELETE
  • PROTOCOL http或者https協議(只有在Elasticsearch前面有https代理的時候可用)
  • HOST Elasticsearch集羣中的任何一個節點的主機名,如果是在本地的節點,那麼就叫localhost
  • PORT Elasticsearch HTTP服務所在的端口,默認爲9200
  • PATH API路徑(例如_count將返回集羣中文檔的數量),PATH可以包含多個組件,例如_cluster/stats或者_nodes/stats/jvm
  • QUERY_STRING 一些可選的查詢請求參數,例如?pretty參數將使請求返回更加美觀易讀的JSON數據
  • BODY 一個JSON格式的請求主體(如果請求需要的話)
二、基本使用
創建、查看索引:
	curl -XPUT '172.17.150.27:9200/megacorp'
	curl '172.17.150.27:9200/_cat/indices?v'

索引裏面添加、查詢文檔
	curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d 
 	 {
   	  "first_name" : "John",
   	 "last_name" :  "Smith",
    	"age" :        25,
   	 "about" :      "I love to go rock climbing",
   	 "interests": [ "sports", "music" ]
  	}'
	
	curl -i -XGET 'http://172.17.150.27:9200/megacorp/employee/1?pretty'    

   -i參數可以顯示Http頭部  pretty以美觀的格式顯示
判斷文檔是否存在:
	curl -i -XHEAD 'http://172.17.150.27:9200/megacorp/employee/1?pretty'    
刪除文檔
	curl -i -XDELETE 'http://172.17.150.27:9200/megacorp/employee/1?pretty'

更新
文檔,檔在Elasticsearch中是不可變的——我們不能修改他們。如果需要更新已存在的文檔,可以使用index api重建索引或者替換它
curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d 
  {
     "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music,sport" ,]
  }'


可以看到,result值爲updated,說明更新了文檔,created值爲false,-version值加一

這個API 似乎 允許你修改文檔的局部,但事實上Elasticsearch遵循與之前所說完全相同的過程,這個過程如下:

  • 從舊文檔中檢索JSON
  • 修改它
  • 刪除舊文檔
  • 索引新文檔
也可以使用update api進行局部更新,更方便有效
curl -i -XPOST '172.17.150.27:9200/megacorp/employee/1/_update?pretty' -d '{"doc":{"interests": [ "sports", "music" ]}}'

查詢文檔數量與明細
	curl -i -XGET '172.17.150.27:9200/megacorp/employee/_count?pretty'
	curl -i -XGET '172.17.150.27:9200/megacorp/employee/_search?pretty'

 Elasticsearch有一個功能叫做聚合(aggregations),它允許你在數據上生成複雜的分析統計。它很像SQL中的GROUP BY但是功能更強大。
舉個例子,讓我們找到所有職員中最大的共同點(興趣愛好)是什麼:
GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}
根據官方文檔顯示,出現該錯誤是因爲5.x之後,Elasticsearch對排序、聚合所依據的字段用單獨的數據結構(fielddata)緩存到內存裏了,但是在text字段上默認
是禁用的,如果有需要單獨開啓,這樣做的目的是爲了節省內存空間。
可以手動開啓text字段的使用,
curl -XPUT 'http://172.17.150.27:9200/megacorp/_mapping/employee' -d '{"properties":{"interests":{"type":"text","fielddata":true}}}'
執行聚合命令
最後,elasticsearch的簡單使用就寫到這邊了,主要參考 https://www.gitbook.com/book/looly/elasticsearch-the-definitive-guide-cn
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章