ElasticSearch 是目前很是流行的搜索引擎,對海量數據搜索是很是友好,而且在高併發場景下,也能發揮出穩定,快速特色。也是大數據和索搜服務的開發人員所極力追捧的中間件。雖然 ElasticSearch 深受你們的喜好,可是它的迭代速度之快,因此在相關社區總是有據說到學不動了的話語,也正是這種不斷完善,才能擁有如今的社區活躍。我使用 ElasticSearch 時,從 5.x 到 6.x 版本,再到如今接觸到 7.x 版本。從版本升級中,也看到了 ElasticSearch 對主流技術變化的擁抱,最明顯的是新版 JDK 版本的支持及容器技術的支持。html
本文基於目前最新版本ElasticSearch-7.5.0
進行操做,如官網下載太慢,可在【ytao公衆號】中發送es
獲取下載連接。node
安裝環境及本文相關包:vim
操做系統 CentOS 7.5 64位 ElasticSearch 7.5.0 Kinbana 7.5.0
ElasticSearch 在 7.x 中自帶 JDK 環境,因此如今不必定要安裝 JDK。默認是先判斷當前服務器是否安裝 JDK,若是安裝了就使用服務器已安裝的 JDK,不然會使用自帶的 JDK,固然這個也是能夠手動設置。api
因爲 ElasticSearch 默認是不支持 root 帳號權限啓動,因此第一步要先建立啓動帳號。 建立一個 ElasticSearch 的運行組 es:bash
groupadd es
在 es 組中建立用戶:服務器
useradd elastic -g es
設置新用戶密碼:併發
passwd elastic
給解壓出的 ElasticSearch 包受權:app
chown -R elastic:es elasticsearch-7.5.0
進入到/elasticsearch-7.5.0
目錄,在config
目錄裏有個elasticsearch.yml
文件,修改裏面當前須要的配置。jvm
0.0.0.0
全部的訪問另一個重要的配置,在當前目錄中的jvm.options
文件設置。 這裏設置堆內存大小,建議設置機器內存的 50% 大小。elasticsearch
-Xms4g -Xmx4g
其餘配置暫時沒用到,暫不分析,從此的文章中用到再進行講解。
安裝配置文件設置的值默認啓動,直接執行./bin/elasticsearch
,果真不出乎所意料,啓動異常。
上圖中拋了兩個異常。
如今就增大服務器虛擬內存:
# 編輯 sysctl.conf 文件 vim /etc/sysctl.conf # 在 sysctl.conf 中添加 vm.max_map_count=262144 # 查看剛設置的是否生效 sysctl -p
設置 cluster.initial_master_nodes 配置參數:
cluster.initial_master_nodes: ["node-1"]
再次啓動完成後,沒有異常拋出,訪問ip:9200
,返回數據信息,其中包括集羣名稱,節點名,版本信息等等:
在進行 API 操做前先安裝 kibana,如下命令執行將所有在 kibana 中執行。解壓 kibana 後,在kibana.yml
中設置 ElasticSearch 地址elasticsearch.hosts: ["http://ip:9200"]
。經過bin/kibana
進行啓動。安裝比較簡單,這裏不作詳細闡述。
建立 person 索引例子,number_of_shards 爲分片數量,number_of_replicas 爲索引的副本數,這裏主要演示建立索引時可設置一些相關參數,且爲非必填項。
PUT /person { "mappings" : { "properties": { "name" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 // 長度超過ignore_above設定的值,不會被索引或存儲 } } } } }, "settings": { "number_of_shards": 1, "number_of_replicas": 1 } }
執行命令結果:
使用 GET 請求方式查詢索引信息:
GET /person
返回結果
使用 DELETE 請求方式:
# 刪除 person 索引 DELETE /person # 刪除所有索引 DELETE /_all # 通配符刪除 DELETE /person*
查詢 person 索引的 mapping :
GET /person/_mapping
向 person 索引中添加 remark 字段,以前 mapping 中的 name 不會被刪除,。
POST /person/_mapping { "properties" : { "remark2" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } }
添加文檔有兩種方式,第一種就是使用指定索引的 type 添加文檔,7.x開始,type 指定只能是 _doc 值,同時也是不支持多 type 的(ps:以前使用type主要用來將索引邏輯分區)。第二種就是使用 _create 進行建立數據。
使用_doc
API向 person 中添加文檔:
PUT /person/_doc/1 { "name":"ytao", "blog":"公衆號 ytao", "remark":"https://ytao.top" }
添加文檔後返回的數據:
上面命令執行過程,若是索引或 mapping 不存在,都會自動建立。這裏的 id 咱們也能夠自動生成,可是請求不能使用 PUT 方式,要改成 POST 方式。
POST /person/_doc/ { "name":"ytao", "blog":"公衆號 ytao", "remark":"https://ytao.top" }
若是上面咱們插入 id 爲 1 的文檔重複執行,那麼會先刪除掉舊的文檔,再引用新的文檔,而且所對應的_version
版本號值會較以前的 +1。
使用_create
API向 person 添加文檔:
PUT /person/_create/2 { "name":"yangtao", "blog":"ytao's blog", "remark":"coder" }
這裏 id 必須指明,不然添加失敗,而且文檔中已存在的 id 不能進行添加。
使用 GET 獲取文檔:
GET /person/_doc/1
返回數據中:
使用_search
API進行查詢,這裏暫時不作深刻講解。 查詢 name 爲 ytao 的文檔,而且經過from=0&size=2
分頁查詢。
# q 爲查詢參數,查詢的字段和值用 : 進行分割 GET /person/_search?q=name:ytao&from=0&size=2
返回結果:
更新文檔使用 _update
API進行更新。更新內容必須包含在doc
中。更新對源數據只能是添加或修改字段,這也是和使用_doc
添加數據的區別,不是經過刪除舊的文檔進行更新的。
POST /person/_update/1 { "doc":{ "blog":"ytao's blog" } }
文檔刪除使用 DELETE 請求,而後指定 id:
DELETE /person/_doc/1
批量處理能夠一次請求中處理多個任務,使用_bulk
API進行。 下面就以索引添加方式添加一個文檔到索引中,而後更新文檔中 blog 字段爲例。
POST _bulk {"index":{"_index":"person", "_id":1}} {"name":"ytao","blog":"公衆號 ytao","remark":"https://ytao.top"} {"update":{"_index":"person", "_id":1}} {"doc":{"blog":"ytao's blog"}}
返回結果中,按每個操做分別返回結果信息,當其中有請求錯誤時,不會影響其餘請求操做。
批量獲取文檔,使用_mget
API進行,經過一次指定多個文檔 id,進行請求。 例如在 person 索引中獲取 id 爲 1,2 的文檔:
POST _mget { "docs":[ { "_index": "person", "_id": 1 }, { "_index": "person", "_id": 2 } ] }
返回結果:
批量查詢文檔,使用_msearch
API進行,將多個查詢整合到一個請求中。 下面就是分別在指定索引中查詢的不一樣條件。
GET /person/_msearch {"index":"person"} {"query":{"match":{"blog":"ytao's blog"}}} {"index":"person"} {"query":{"match":{"remark":"coder"}}}
返回結果:
本文對 ElasticSearch 的最基礎的,經常使用的操做 API,這裏已經介紹完畢。要想學習 ElasticSearch,建議從 API 操做入手,千萬別上來就直接拿着代碼就幹,雖然各語言都已提供相關工具包,可是這些封裝也都是基於 API 上的。更多的 API 在從此文章涉及時再進行分析。
更多 API 相關信息,建議查閱官網,這裏有比較詳細的介紹: https://www.elastic.co/guide/en/elasticsearch/reference/7.5/rest-apis.html
我的博客: https://ytao.top
關注公衆號 【ytao】,更多原創好文