ElasticSearch之安裝及基本操作API

2021-02-23 程式設計師喬戈裡

ElasticSearch 是目前非常流行的搜尋引擎,對海量數據搜索是非常友好,並且在高並發場景下,也能發揮出穩定,快速特點。也是大數據和索搜服務的開發人員所極力追捧的中間件。雖然 ElasticSearch 深受大家的喜愛,但是它的迭代速度之快,所以在相關社區老是有聽說到學不動了的話語,也正是這種不斷完善,才能擁有現在的社區活躍。我使用 ElasticSearch 時,從 5.x 到 6.x 版本,再到現在接觸到 7.x 版本。從版本升級中,也看到了 ElasticSearch 對主流技術變化的擁抱,最明顯的是新版 JDK 版本的支持及容器技術的支持。

安裝

本文基於目前最新版本 ElasticSearch-7.5.0進行操作,如官網下載太慢

安裝環境及本文相關包:

作業系統 CentOS 7.5 64位

ElasticSearch 7.5.0

Kinbana 7.5.0

JDK 環境

ElasticSearch 在 7.x 中自帶 JDK 環境,所以現在不一定要安裝 JDK。默認是先判斷當前伺服器是否安裝 JDK,如果安裝了就使用伺服器已安裝的 JDK,否則會使用自帶的 JDK,當然這個也是可以手動設置。

創建啟動帳號

由於 ElasticSearch 默認是不支持 root 帳號權限啟動,所以第一步要先創建啟動帳號。創建一個 ElasticSearch 的運行組 es:

groupadd es

在 es 組中創建用戶:

useradd elastic -g es

設置新用戶密碼:

passwd elastic

給解壓出的 ElasticSearch 包授權:

chown -R elastic:es elasticsearch-7.5.0

修改配置文件

進入到 /elasticsearch-7.5.0目錄,在 config目錄裡有個 elasticsearch.yml文件,修改裡面當前需要的配置。

cluster.name 是所屬集群的名稱

node.name 當前節點名稱

network.host 當前節點所綁定地址,綁定到 0.0.0.0所有的訪問

http.port 對外提供服務的埠號

path.data 數據存儲目錄,這個我一般不適用默認目錄,但是要給自定義的目錄授權

path.log 日誌目錄,和 path.data 類似配置

另外一個重要的配置,在當前目錄中的 jvm.options文件設置。這裡設置堆內存大小,建議設置機器內存的 50% 大小。

-Xms4g

-Xmx4g

其他配置暫時沒用到,暫不分析,今後的文章中用到再進行講解。

啟動

安裝配置文件設置的值默認啟動,直接執行 ./bin/elasticsearch,果然不出乎所意料,啟動異常。

上圖中拋了兩個異常。

現在就增大伺服器虛擬內存:

# 編輯 sysctl.conf 文件

vim /etc/sysctl.conf

# 在 sysctl.conf 中添加

vm.max_map_count=262144

# 查看剛設置的是否生效

sysctl -p

設置 cluster.initialmasternodes 配置參數:

cluster.initial_master_nodes: ["node-1"]

再次啟動完成後,沒有異常拋出,訪問 ip:9200,返回數據信息,其中包括集群名稱,節點名,版本信息等等:

基本操作API

在進行 API 操作前先安裝 kibana,以下命令執行將全部在 kibana 中執行。解壓 kibana 後,在 kibana.yml中設置 ElasticSearch 地址 elasticsearch.hosts:["http://ip:9200"]。通過 bin/kibana進行啟動。安裝比較簡單,這裡不做詳細闡述。

索引操作創建索引

創建 person 索引例子,numberofshards 為分片數量,numberofreplicas 為索引的副本數,這裡主要演示創建索引時可設置一些相關參數,且為非必填項。

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*

mapping 操作

查詢 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 進行創建數據。

index 方式添加文檔

使用 _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 方式添加文檔

使用 _create API向 person 添加文檔:

PUT /person/_create/2

{

"name":"yangtao",

"blog":"ytao's blog",

"remark":"coder"

}

這裡 id 必須指明,否則添加失敗,並且文檔中已存在的 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 在今後文章涉及時再進行分析。

相關焦點

  • 深入淺出 spring-data-elasticsearch - 基本案例詳解(三)
    工程三、spring-data-elasticsearch-crud 工程代碼詳解一、spring-data-elasticsearch-crud 的工程介紹spring-data-elasticsearch-crud 的工程,介紹 Spring Data Elasticsearch 簡單的 ES 操作。
  • 由Elasticsearch的API命令,引發的金融業生產故障
    李猛,數據領域專家,Elastic Stack國內頂尖實戰專家,國內首批Elastic官方認證工程師21人之一。2012年入手Elasticsearch,對Elastic Stack技術棧開發、架構、運維、源碼、算法等方面有深入實戰經驗。
  • Elasticsearch安裝及使用
    在5.x版本中不支持直接安裝head插件,需要單獨啟動一個服務,安裝及啟動步驟如下:執行下載插件命令:git clone git://github.com/mobz/elasticsearch-head.git下載完畢後進入elasticsearch-head目錄,目錄結構如下:執行安裝命令:cd elasticsearch-head
  • Linxu安裝ElasticSearch
    Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎。Elasticsearch用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在 Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。
  • ElasticSearch Operator 工作原理淺析
    >安裝安裝 ElasticSearch Operator 十分簡單,基於 all in one yaml,快速拉起 Operator 所有組件,並註冊 CRD。elasticapmservers.apm.k8s.elastic.co 2020-05-10T08:02:15Zelasticsearches.elasticsearch.k8s.elastic.co 2020-05-10T08:02:15Zkibanas.kibana.k8s.elastic.co 2020-05-10T08
  • ElasticSearch安裝
    Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎。Elasticsearch用於雲計算[3]中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。
  • 監控 Elasticsearch 及 Kibana
    在上面的配置中,安裝的軟體不少。我們先來分別安裝需要的部分:在這個集群中,我們使用 debian 安裝包進行安裝,並且配置 https 的訪問。在我之前的文章 「Security:如何安裝 Elastic SIEM 和 EDR」 有非常詳細的描述。請大家按照文章裡的要求部署 Elasticsearch 及 Kibana。
  • 使用Java Rest Client操作Elasticsearch
    Elasticsearch作為一個成熟的開源框架,對主流的多種客戶端語言都支持,比如Java,JavaScript ,PHP,.Net
  • ElasticSearch 從安裝開始
    2.1 單節點安裝首先打開 Es 官網,找到 Elasticsearch:https://www.elastic.co/cn/elasticsearch/然後點擊下載按鈕,選擇合適的版本直接下載即可。打開 config/elasticsearch.yml 文件,可以配置集群名稱以及節點名稱。
  • Spring Data Elasticsearch 的基本使用 Spring全家桶真香警告!
    >spring-data-elasticsearch</artifactId>            <version>4.0.4.RELEASE</version>        </dependency>二、配置application.propertiesspring.data.elasticsearch.cluster-name
  • Elasticsearch 及其套件的安裝上手
    說明:Elasticsearch是基於Java開發的,所以如果是下載Elasticsearch 6.x及之前的版本,需要自己安裝Java環境;如果是7.x版本,會自帶Java環境,無需額外安裝,本次我們安裝的版本是7.11.1。其他套件的安裝,也需要根據相應的版本進行安裝。Elasticsearchwindows 環境,下載後加壓即可。
  • Elasticsearch(三):實戰
    的核心概念進行比較詳細的介紹,但是在實際生產中我們如何使用elasticsearch呢?本篇文章我們先介紹一些elasticsearch常見的使用方法,然後通過一個實際的例子來加深對elasticsearch使用的理解。這個實際例子是網站上收集的用戶點擊菜單的行為日誌數據存儲在elasticsearch上,並可以通過工具可以通過一些圖表來分析用戶的行為。總體的目標:滿足多個維度圖表的查看,索引可以定期歸檔或者存儲不用人工幹預。
  • 實戰:Nodejs+Mongodb+Elasticsearch 實現簡單的搜索
    elasticsearch 的基本功能就已經足夠一般的搜索需求。本文將介紹,如何使用 nodejs + mongodb + es 實現一個簡單而強大的全文搜索功能,以提高網站搜索體驗。基本架構圖在安裝完 java 環境後,就可以直接運行 elasticsearch 目錄裡的 bin/elasticsearh。不過在虛擬機中,會有各種像內存不足,文件描述符限制等問題。
  • SpringBoot 操作 ElasticSearch 詳解
    四、索引操作示例. 1、Restful 操作示例. 2、Java 代碼示例. 五、文檔操作示例. 1、Restful 操作示例. 2、Java 代碼示例. 六、插入初始化數據. 1、單條插入. 2、批量插入. 3、查詢數據.
  • Elastic App Search初體驗
    elasticsearch我們選擇的是使用rpm包的安裝方式,elasticsearch-7.9.0-x86_64.rpm,elastic7.9版本已經自帶打包了jdk,無需再獨立安裝jdk。在elasticsearch6.8版本之後,x_pack模塊帳戶基本功能已經免費;本文部署也將開啟安全模塊:xpack.security.enabled: trueyum localinstall elasticsearch-7.9.0-x86_64.rpm -y;安裝ES後執行如下命令籤發證書://首先生成
  • Fluentd+Elasticsearch+kibana 日誌收集部署實戰
    Kibana是一個開源的用於數據可視化的web UI工具,可使用它對日誌進行高效的搜索、可視化、分析等各種操作。apiVersion: extensions/v1beta1kind: DaemonSetmetadata:  name: fluentd-elasticsearch  namespace: kube-system  labels:    k8s-app: fluentd-logging
  • elasticsearch和kibana的保姆級安裝教程
    目錄導航為什麼使用docker容器部署這些應用elasticsearch安裝安裝kibana安裝ik分詞器插件安裝elasticsearch-head插件參考文獻Linux平臺是Docker原生支持平臺,在Linux上使用Docker可以得到最佳的用戶體驗,本文的安裝環境為 Ubuntu18.04虛擬機。docker安裝1、首先對虛擬機做一些基本的配置。
  • 終於有人把elasticsearch原理講通了!
    【elasticsearch基本概念】呂老師:之前我們說過,elasticsearch把操作都封裝成了http的api,我們只要給elasticsearch發送http請求就行。比如使用curl -XPUT 'http://ip:port/poems',就能建立一個名為poems的索引,其他操作也是類似的。
  • Elasticsearch 的快照插件
    插件的安裝與查詢插件可以通過命令行 elasticsearch-plugin 來安裝(官方文檔[1]):sudo bin/elasticsearch-plugin install $plugin_namesudo
  • ElasticSearch介紹
    /cn/products/elasticsearchGithub:https://github.com/elastic/elasticsearch總結:1、elasticsearch是一個基於Lucene的高擴展的分布式搜索伺服器,支持開箱即用。