Elasticsearch 搜尋名詞的理解
阿新 • • 發佈:2018-11-17
在進一步使用 Elasticsearch 之前,讓我們先了解幾個關鍵概念。
在邏輯層面:
- Index (索引):這裡的 Index 是名詞,一個 Index 就像是傳統關係資料庫的 Database,它是 Elasticsearch 用來儲存資料的邏輯區域
- Document (文件):Elasticsearch 使用 JSON 文件來表示一個物件,就像是關係資料庫中一個 Table 中的一行資料
- Type (型別):文件歸屬於一種 Type,就像是關係資料庫中的一個 Table
- Field (欄位):每個文件包含多個欄位,類似關係資料庫中一個 Table 的列
我們用一個表格來做類比,如下:
Elasticsearch | MySQL |
---|---|
Index | Database |
Type | Table |
Document | Row |
Field | Column |
在物理層面:
- Node (節點):node 是一個執行著的 Elasticsearch 例項,一個 node 就是一個單獨的 server
- Cluster (叢集):cluster 是多個 node 的集合
- Shard (分片):資料分片,一個 index 可能會存在於多個 shard
使用
接下來,我們看看如何建立索引、建立文件等,就好比在 MySQL 中進行諸如建立資料庫,插入資料等操作。
新增文件
下面,我們將建立一個儲存電影資訊的 Document:
- Index 的名稱為 movie
- Type 為 adventure
- Document 有兩個欄位:name 和 actors
我們使用 Elasticsearch 提供的 RESTful API 來執行上述操作,如圖所示:
- 用 url 表示一個資源,比如
/movie/adventure/1
index
為 movie,type
為 adventure,id
為 1 的 document - 用 http 方法操作資源,如使用 GET 獲取資源,使用 POST、PUT 新增或更新資源,使用 DELETE 刪除資源等
檢視所有的索引命令:
curl 'localhost:9200/_cat/indices?v'
索引下資料檢視
http get :9200/customer/_search
Elasticsearch 啟動後,也啟動了兩個埠 9200 和 9300:
- 9200 埠:HTTP RESTful 介面的通訊埠
- 9300 埠:TCP 通訊埠,用於叢集間節點通訊和與 Java 客戶端通訊的埠
現在,讓我們做一些測試。在瀏覽器訪問連結 http://localhost:9200/ ,或使用 curl 命令: