1、ElasticSearch-head是什么?
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。 -----百度百科
而ElasticSearch-head就是一款能連接ElasticSearch搜索引擎,並提供可視化的操作頁面對ElasticSearch搜索引擎進行各種設置和數據檢索功能的管理插件,如在head插件頁面編寫RESTful接口風格的請求,就可以對ElasticSearch中的數據進行增刪改查、創建或者刪除索引等操作。類似於使用navicat工具連接MySQL這種關系型數據庫,對數據庫做操作。
對於如何安裝ElasticSearch和ElasticSearch-head下面不做說明,百度下,網上有很多資料~
2、ElasticSearch-head頁面介紹
2.1 head插件登陸和連接ElasticSearch
在登陸和訪問head插件地址和ElasticSearch前需要事先在服務器上安裝和配置好ElasticSearch以及head插件。安裝完后,默認head插件的web端口為9100,ElasticSearch服務的端口為9200,使用瀏覽器訪問head地址,如http://IP地址:9100/,推薦使用Chrome瀏覽器,head插件對Chrome瀏覽器兼容更佳。進入head頁面后將ElasticSearch連接輸入框中填寫正確的ElasticSearch服務地址,如http://IP地址:9200/。訪問后效果如下圖:

2.2 head插件頁面
概覽頁面:

上圖為概覽頁面效果,簡單說明下以上5個畫了紅框的地方
1:集群健康值。Elasticsearch 中其實有專門的衡量索引健康狀況的標志,分為三個等級:
- green,綠色。這代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
- yellow,黃色。所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果更多的分片消失,你就會丟數據了。所以可把 yellow 想象成一個需要及時調查的警告。
- red,紅色。至少一個主分片以及它的全部副本都在缺失中。這意味着你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。
如果只有一台主機的話,其實索引的健康狀況也是 yellow,所有上圖顯示為yellow。因為一台主機,集群沒有其他的主機可以防止副本,所以說,這就是一個不健康的狀態,因此集群也是十分有必要的。
2:表示在Elasticsearch已經創建的索引(index)。包含了索引的名稱、索引的大小(size)、索引的數據量(docs),並且通過【信息】和【動作】可以查看索引信息或者給索引建別名。
3:表示Elasticsearch節點。上圖中的帶有感嘆號的Unassigned表示未分配的節點,帶有星號的表示是主節點,其節點名稱叫:Hu9Suoy,並能查看節點信息。
4:表示索引分片,Elasticsearch數據就存儲在這些分片中。
5:查看Elasticsearch相關的信息和刷新head插件。如查看Elasticsearch版本信息,如下圖:

索引頁面:
索引頁面能看到當前Elasticsearch中已經創建的索引,這里的索引類似於傳統關系型數據庫中的一張張表,並且可以在該頁面上新建索引。

數據瀏覽頁面:
數據瀏覽頁面能查看所有索引分片的數據

基本查詢和復合查詢頁面:
這兩個頁面做數據檢索,基本查詢頁面僅提供簡單的查詢並不能修改數據,復合查詢頁面提供編寫RESTful接口風格的請求,來對Elasticsearch中的數據進行各種增刪改查等操作請求,其頁面分別如下:
基本查詢頁面

復合查詢頁面

3、基本查詢
基本查詢頁面可以對數據進行簡單的查詢。
查詢關鍵字有三種:分別是:must,should,must_not
- must子句:文檔必須匹配must查詢條件,相當於“=”;
- should子句:文檔應該匹配should子句查詢的一個或多個;
- must_not子句:文檔不能匹配該查詢條件,相當於“!=”;
如下圖基本查詢實例:

默認返回結果使用table展示,即表格形式,還有json、csv形式展示
其中檢索條件有諸多,如下圖:

通常term表示精確匹配,wildcard : 通配符匹配 prefix:前綴匹配,range區間查詢,如使用wildcard查找帶有“粵BN69”的數據:

其它的檢索條件也可以嘗試檢索下
4、復合查詢
復合查詢頁面提供編寫RESTful接口風格的請求,使用json進行復雜的查詢,也可發送put請求新增及更新索引,使用delete請求刪除索引等等來對Elasticsearch中的數據或者索引進行各種增刪改查等操作請求。
ES以RESTFul風格來命名API的, 其API的基本格式類似如下:

以http來決定請求的方法或者動作: 常用的有GET/PUT/POST/DELETE
4.1查詢數據
比如我們查詢st_face這個索引,通過索引類型face_info(這里的索引類型類似於mysql數據庫中創建的索引),搜索分片屬性為time的字段,如下圖效果:

4.2插入數據
插入數據使用POST或者PUT方法,只是POST方法為自動生成id,而PUT方法需要指明id,如下圖實例:
POST方法

PUT方法:

4.3修改數據

4.4刪除數據
刪除數據使用DELETE方法,實例如下:

注:
Head插件中編寫json發送請求比較復雜和不方便, 可以使用postman或者python ElasticSearch模塊提供的API等工具進行請求的發送,來實現對ElasticSearch的數據和索引進行增刪改查。
5、Python ElasticSearch模塊
Python Elasticsearch模塊是Python的一個第三方模塊庫,需要手動安裝,如果已經安裝了pip工具,就可以直接通過命令:pip install elasticsearch一鍵安裝。Elasticsearch API封裝並提供了可操作Elasticsearch的幾乎所有動作,包括常用的Elasticsearch數據的增刪改查和索引操作。
以下是一些參考文檔地址:
Elasticsearch官方API文檔地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html
Elasticsearch模塊的使用:
https://www.cnblogs.com/xiao987334176/p/10130712.html
下面通過一個實例編寫腳本,實現連接Elasticsearch,並批量向Elasticsearch數據庫中的st_face索引中寫入數據,在PyCharm中編輯如下代碼:

執行完成后,在Elasticsearch中查看st_face索引中剛剛批量插入的數據,如下:

