1. ES索引的基礎操作
1.1 ES創建索引
對於關系型數據庫,創建索引就等同於創建數據庫。
在Postman中,向ES服務器發送put
請求.
例如創建索引 http://127.0.0.1:9200/shopping
1.2 查看索引
在Postman中,向ES服務器發送Get
請求:http://127.0.0.1:9200/_cat/indices?v
,
請求路徑中的_cat表示查看的意思,indices表示索引,所以整體含義就是查看當前ES服務器中的所有索引,類似於MySQL中的show tables的樣子。服務器的響應結果如下
1.3 查看單一索引
在Postman中,向ES服務器發送Get請求: http://127.0.0.1:9200/shopping
查看索引向ES服務器發送的的請求路徑和創建索引是一致的,但是HTTP方法不一致。
1.4 刪除索引
在Postman中,向ES就請你發送Delete請求:htto://127.0.0.1:9200/shopping
在重新訪問索引時,服務器響應內容為:索引不存在
2. 文檔操作
文檔(_doc)可以類比為關系型數據庫中的表數據,添加的數據格式為JSON格式。
2.1 創建文檔
在Postman中,向ES集群發送post請求,http://127.0.0.1:9200/shopping/_doc
請求體內容為
{
"title":"小米手機",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
此處請求方式必須為POST,不能是Put,否則發生錯誤。
上面的數據創建后,由於沒有指定數據唯一性標識(ID),默認情況下,ES服務器會隨機生成一個。
如果想要自定義唯一性標識,需要在創建的時候指定: http://127.0.0.1:9200/shopping/_doc/1
{
"title":"華為手機",
"category":"華為",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":4999.00
}
此處如果添加數據明確數據主鍵,那么請求方式是Put也是可以的
2.2 查看文檔(根據主鍵)
查看文檔時,需要指明文檔的唯一性標識,類似於MySQL中數據的主鍵查詢,在Postman中,向ES服務器發送Get請求,http://127.0.0.1:9200/shopping/_doc/1
查詢成功后,服務器響應結果如下
2.3 查看所有文檔
查看索引下包含的所有文檔信息。類似於 select *
,向ES服務器中發送Get請求, http://127.0.0.1:9200/shopping/_search
查詢成功后,服務器響應結果如下
2.4 修改文檔
和新增文檔一樣,輸入相同的URL地址請求,如果請求體變化,會將原來的數據內容覆蓋
。在Postman中,向ES服務器發送Post請求,http://127.0.0.1:9200/shopping/_doc/1
{
"title":"華為手機",
"category":"華為",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":6999.00
}
修改成功后,服務器響應結果:
2.5 修改某個字段
修改數據時,也可以只修改某一條給定數據的局部信息
在Postman中,向ES服務器發送POST請求,http://127.0.0.1:9200/shoppong/_update/1
請求內容為:
{
"doc": {
"price":3000.00
}
}
修改成功后,服務器響應結果
根據唯一性標識,查詢文檔結構,可以發現,文檔數據已經更新。
2.6 刪除文檔
在ES中刪除一個文檔不會立即從磁盤中刪除,它只是被標記成已刪除(邏輯刪除)
在Postman中,向ES服務器發送DELETE請求:http://127.0.0.1:9200/shopping/_doc/1
刪除成功后,服務器響應結果
字段 | 說明 |
---|---|
_version | 版本(對數據的操作,都會更新版本) |
result | deleted表示數據被標記為刪除 |
刪除后再查詢當前文檔信息
2.7 條件刪除文檔
一般刪除數據都是根據文檔的唯一性標識進行刪除,實際操作中,也可以根據條件對多條數據進行刪除。
首先分別增加多條數據
{
"title":"小米手機",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":4000.00
}
{
"title":"華為手機",
"category":"華為",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":4000.00
}
向ES服務器中發送POST請求,http://127.0.0.1:9200/shopping/_delete_by_query
請求內容為
{
"query": {
"match": {
"price": 4000.00
}
}
}
刪除成功后,服務器響應結果:
字段 | 說明 |
---|---|
took | 耗時 |
timed_out | 是否超時 |
total | 總數 |
deleted | 刪除數量 |
3文檔映射
索引庫(index)的映射,類似於數據庫(database)中的表結構(table)。創建數據庫表需要設置字段名稱,類型,長度,約束等信息;索引庫也一樣,需要知道這個類型下有哪些字段,每個字段有哪些約束信息,這就叫做映射(Mapping)。
3.1 創建映射
在Postman中,向ES服務器發Put請求,http://127.0.0.1:9200/shopping/_mapping
請求體內容為
{
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
服務器返回的響應結果如下
映射數據說明:
-
字段名:任意填寫。比如上面的name、sex、age
-
Type:類型,ElasticSearch中支持的數據類型非常豐富。
- String類型。又可以分為兩種
- text:可分詞
- keyword:不可分詞,數據會作為完整字段進行匹配
- Numerical:數值類型,分為兩大類
- 基本數據類型: long、integer、short、byte、double、float、half_float
- 浮點數的高精度類型:scaled_float
- Date:日期類型
- Array:數組類型
- Object:對象
- String類型。又可以分為兩種
-
index:是否索引,默認是true,也就是說不進行任何配置,所有字段都會被索引
- true:字段會被索引,則可以用來進行搜索
- false:字段不會被索引,無法用來進行搜索
-
store:是否將數據進行獨立存儲,默認為false
- 原始的文本會存儲在_source 里面,默認情況下其他提取出來的字段都不是獨立存儲 的,是從_source 里面提取出來的。當然你也可以獨立的存儲某個字段,只要設置 "store": true 即可,獲取獨立存儲的字段要比從_source 中解析快得多,但是也會占用 更多的空間,所以要根據實際業務需求來設置。
-
analyzer:分詞器,這里的ik_max_word即使用ik分詞器。
3.2 查看映射
在Postman中,向ES服務器發送Get請求,http://127.0.0.1:9200/shopping/_mapping
服務器響應結果如下
3.3 索引映射關聯
初始化索引,並創建索引中的字段對應的映射關系。
向ES服務器發送Put請求,http://127.0.0.1:9200/student
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
}
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"index": true
},
"sex": {
"type": "text",
"index": false
},
"age": {
"type": "long",
"index": false
}
}
}
}
服務器響應結果如下