es筆記一之es安裝與介紹

XHunter發表於2023-05-18

本文首發於公眾號:Hunter後端
原文連結:es筆記一之es安裝與介紹

首先介紹一下 es,全名為 Elasticsearch,它定義上不是一種資料庫,是一種搜尋引擎。

我們可以把海量資料都放到 es 裡然後提供搜尋操作,但是 MySQL 也同樣可以提供搜尋,為什麼要用 es 呢?

一個是因為它搜尋快,使用倒排索引的方式將資料分詞之後儲存資料,查詢的時候直接根據搜尋關鍵詞找到相關資料。

另一個是因為它可以提供一些 MySQL 做不到或者比較耗時的模糊搜尋,這個我們後續再介紹。

1、es 和 kibana 的安裝

es 和 kibana 的安裝這裡可以直接看我之前的一篇部落格文章,講的很詳細,或者去官網找相應的安裝步驟。

es和kibana安裝

這裡我們使用的是 7.6.0 版本。

kibana 是一個介面工具,可以用於在瀏覽器介面直接操作 es。

2、es 層級和結構介紹

首先,我們進入 kibana 介面,建立一條資料,然後根據這條資料來介紹 es 中結構的層級關係。

進入 kibana 的輸入介面,輸入:

PUT /customer/_doc/1
{
  "name": "John Doe"
}

點選 PUT 命令同行右邊的三角形,或者按住 ctrl + enter 確認,我們就完成了一次資料的建立。

然後輸入下面的命令檢視這條資料的詳情:

GET /customer/_doc/1

透過資料的儲存和檢視,我們可以差不多瞭解 es 中資料的操作方式是 restful 風格的,可以透過 GET、PUT、POST、DELETE 的方式來實現資料的增刪改查。

然後看一下我們透過 GET 方式獲得的資料情況,如下:

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe"
  }
}

在這個資料結構中,有一些東西是可以和 MySQL 等資料庫的結構對應起來的,比如 index 對應 MySQL 中的 database,type 對應 MySQL 中的 table,而 source 中的資料則對應於 MySQL 中一條條的資料。

但是 es 中 source 中的這些欄位,比如 name,可以不預先定義,也可以預先定義,這一點不同於 MySQL,es 甚至可以直接寫入值,es 會自動為其找到對應的欄位屬性從而定義。

比如我們前面 PUT 的這條資料,檢視 customer 這個資料庫 index 的結構,可以看到 es 根據值為其自動建立了屬性為 keyword。(es 中欄位的各個屬性我們後面再介紹)

怎麼檢視 es 中 index 各個欄位的屬性呢,比如 customer,如下操作:

GET /customer/_mapping

index 和 type 也一樣,如果建立資料的時候不存在,那麼 es 也會自動為我們建立相應的層級結構。

3、es 欄位介紹

es 中的欄位型別挺多的,一般計算機語言有的 es 中也有。

keyword

常用於儲存結構化內容,比如email地址,電話號碼,名稱等等

text

文字型別,常用於儲存大段文字,然後可以進行分詞搜尋等操作

integer

整數

long

浮點型資料

date

日期格式,比如 '2022-01-01 12:00:00'

boolean

布林型,true/false

陣列

es 中沒有單獨的陣列型別,但是當我們確定將某個欄位作為陣列之後,可以直接將其作為陣列使用,但是新增的元素必須是相同的,這個我們後面再介紹。

上面這些欄位的含義和使用,這裡只是做一個簡單的介紹,後面尤其是和 Python 連線使用的時候,我們再對其使用方法做具體詳細的介紹。

4、資料準備

在接下來的筆記中,我們將介紹 es 中各種搜尋操作,在此之前,我們這裡需要手動寫入一批資料,具體操作如下。

首先我們去獲取一個資料檔案,那上面有一批供我們查詢使用的資料,這個檔案之前在官方文件提供的 github 地址,我去看了下,已經不存在了,所以這裡我擷取一批資料還是放到名為 accounts.json 文件裡,文件等會兒我放在文章末尾,可供複製。

我們將這個檔案放在某個目錄下,然後當前目錄執行下面的語句匯入到我們在本地啟動的 es 中:

curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"

然後進入 kibana,檢視所有資料庫,可以看到已經多了一個名為 bank 的資料庫:

GET /_cat/indices

這是 json 檔案的地址:accounts.json

下一篇筆記我們開始介紹 es 的搜尋。

如果想獲取更多後端相關文章,可掃碼關注閱讀:
image

相關文章