本文首發於公眾號:Hunter後端 原文鏈接:es筆記一之es安裝與介紹 首先介紹一下 es,全名為 Elasticsearch,它定義上不是一種資料庫,是一種搜索引擎。 我們可以把海量數據都放到 es 里然後提供搜索操作,但是 MySQL 也同樣可以提供搜索,為什麼要用 es 呢? 一個是因為它搜 ...
本文首發於公眾號:Hunter後端
原文鏈接:es筆記一之es安裝與介紹
首先介紹一下 es,全名為 Elasticsearch,它定義上不是一種資料庫,是一種搜索引擎。
我們可以把海量數據都放到 es 里然後提供搜索操作,但是 MySQL 也同樣可以提供搜索,為什麼要用 es 呢?
一個是因為它搜索快,使用倒排索引的方式將數據分詞之後存儲數據,查詢的時候直接根據搜索關鍵詞找到相關數據。
另一個是因為它可以提供一些 MySQL 做不到或者比較耗時的模糊搜索,這個我們後續再介紹。
1、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 的搜索。
如果想獲取更多後端相關文章,可掃碼關註閱讀: