Elasticsearch技術解析與實戰-索引
阿新 • • 發佈:2019-02-23
htm bulk version 繼續 多文檔 filter case || 重建
1.索引管理
創建索引
PUT http://127.0.0.1:9200/secisland { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "aliases": {}, "mappings": { "doc": { "properties": { "sign_id": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 128 } } }, "pin": { "type": "keyword" }, "app_id": { "type": "keyword" }, "msg_content": { "type": "text" }, "create_time": { "type": "date", "format": "yyyyMMddHHmmss||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis" }, "mobile_num": { "type": "keyword" }, "expand_num": { "type": "keyword" }, "data_coding": { "type": "keyword" } } } } }
刪除索引
DELETE http://127.0.0.1:9200/secisland/
獲取索引信息
GET http://127.0.0.1:9200/secisland/
打開、關閉索引
POST http://127.0.0.1:9200/secisland/_open POST http://127.0.0.1:9200/secisland/_close
可以同時打開或關閉多個索引,全部索引可以使用_all打開或關閉,或者使用通配符表示全部(比如*)。
設置config/elasticsearch.yml 屬性 action.destructive_requires_name 為 true,禁止使用通配符或者_all。
關閉索引會繼續占用磁盤空間。
設置settingscluster.indices.close.enable 為 false ,禁止使用關閉索引功能。
判斷索引是否存在
HEAD http://127.0.0.1:9200/secisland
2.索引映射管理
修改映射
PUT http://127.0.0.1:9200/secisland/_mapping/doc { "properties": { "name": {"type": "keyword"} } }
# 可以同時修改多個索引映射,索引名稱支持逗號分隔,_all,通配符*。
獲取映射
GET http://127.0.0.1:9200/secisland/_mapping/doc
獲取字段映射
GET http://127.0.0.1:9200/secisland/_mapping/doc/field/text
格式:
GET host:port/{index}/_mapping/doc/field/{field}
#{index},{field}可以使用逗號分割,也可以使用通配符,其中{index}可以使用_all表示全部索引
3.索引別名
創建別名
格式:PUT /{index}/_alias/{name} 參數:{"routing":"1","filter":{}} {index} 可以使用*,_all,正則表達式或者逗號分隔 {name} 索引名稱 PUT http://127.0.0.1:9200/secisland/_alias/user_12 { "routing":"12", "filter":{ "term":{"user_id":12} } }
刪除別名
DELETE http://127.0.0.1:9200/secisland/_alias/user_12
查詢別名
GET http://127.0.0.1:9200/secisland/_alias/* GET http://127.0.0.1:9200/_alias/user_12
判斷別名是否存在
HEAD http://127.0.0.1:9200/secisland/_alias/user_12 HEAD http://127.0.0.1:9200/secisland/_alias/* HEAD http://127.0.0.1:9200/_alias/user_12 HEAD http://127.0.0.1:9200/_alias/*
4.索引配置
更新索引配置
PUT http://127.0.0.1:9200/secisland/_setting { "index":{"number_of_replicas":4} }
更新分詞器
添加分析器前,必須先關閉索引,添加後再打開索引。 POST http://127.0.0.1:9200/secisland/_close PUT http://127.0.0.1:9200/secisland/_settings { "analysis":{ "analyzer":{ "content":{"type":"custom","tokenizer":"whitespace"} } } } POST http://127.0.0.1:9200/secisland/_open
獲取配置
GET http://127.0.0.1:9200/secisland/_open
索引分析
包括3個過程: 字符過濾器(character filter)->分詞器(tokenizer)->標記過濾器(token filters) 測試分析器 POST http://127.0.0.1:9200/_analyze { "analyzer":"standard", "text":"this is a test" } POST http://127.0.0.1:9200/_analyze { "tokenizer":"keyword", "token_filters":["lowercase"], "char_filters":["html_strip"], "text":"detailed output", "explain":true }
索引模板
創建模板,適配te*索引 PUT http://127.0.0.1:9200/_template/template_1 { "template":"te*", "settings":{}, "mapping":{} } 刪除模板 DELETE http://127.0.0.1:9200/_template/template_1 獲取模板 GET http://127.0.0.1:9200/_template/template_1 GET http://127.0.0.1:9200/_template/temp* GET http://127.0.0.1:9200/_template/template_1,template_2 GET http://127.0.0.1:9200/_template/ 判斷索引是否存在 HEAD http://127.0.0.1:9200/_template/template_1 多模板匹配,合並多模板配置,如果配置重復,這是應設置order屬性,0開始,數值低優先級高,優先級相同,後匹配的覆蓋之前的配置。
重建索引
可以指定查詢條件,同時支持通過腳本修改文檔。 POST http://127.0.0.1:9200/_reindex { "size":10000, "source":{ "index":"secisland", "query":{ "match":{"company": "cat"} } }, "dest":{"index":"new_secisland", "version_type":"external","routing":"=cat"}, "script":{ "internal":"if (ctx._souce.foo == ‘bar‘) {ctx._version++;ctx._source.remove(‘foo‘)}" } }
5.索引監控
索引統計接口
GET http://127.0.0.1:9200/_stats GET http://127.0.0.1:9200/_stats/indexing GET http://127.0.0.1:9200/index1,index2/_stats/indexing 統計項: docs:文檔、刪除文檔(沒有合並的文檔)的數量。受刷新頻率的影響。 store:索引的大小。 indexing:索引統計數據。 get:獲取統計數據,包含缺失統計。 search:搜索統計數據。可以統計不同groups的數據。 completion:完成建議統計數據。 fielddata:字段數據統計數據。 flush:沖洗統計數據。 merge:merge統計數據。 request_cache:分片請求緩存統計數據。 refresh:刷新統計數據。 suggest:建議統計數據 translog:事物日誌統計數據。
索引分片接口
GET http://127.0.0.1:9200/secisland/_segments 索引分片信息: _3:json文檔的鍵名,代表分片的名稱。用來生成文檔名,所有以分片名開頭的文檔屬於這個分片。 generation:需要寫新的分片時生成的數值,基本是遞增的。分片名從這個數字派生出來。 num_docs:存儲在分片中沒有被刪除的文檔數量。 deleted_docs:存儲在分片中被刪除的數量。 size_in_bytes:分片使用的磁盤空間。 memory_in_bytes:分片占用的內存數量。 committed:分片在磁盤上是否同步。 search:分片是否可以搜索。 version:寫分片的lucene版本。 compound:分片是否存儲在符合文件中。
索引恢復接口
GET http://127.0.0.1:9200/secisland/_recovery 索引恢復輸出字段: id:分片。 type:恢復類型:存儲、快照、復制、遷移。 stage:恢復階段:初始化(沒有開始)、索引(讀取索引元字段,從源復制到目的地)、開始(啟動恢復;開啟使用的索引)、事物日誌(重做事物日誌)、完成(清理)、結束。 primary:true為主分片;false為從分片。 start_time:恢復開始時間戳。 stop_time:恢復結束時間戳。 total_time_in_millis:恢復時間(毫秒)。 source:恢復原:如果是快照恢復,描述備份倉庫;否則描述源節點。 target:目標節點。 index:物理索引恢復的統計數據。 translog:事物日誌恢復的統計數據。 start:打開和啟動索引的時間統計數據。
索引分片存儲接口
GET http://127.0.0.1:9200/secisland/_shard_stores?status=green
6.狀態管理
清除緩存
GET http://127.0.0.1:9200/secisland/_cache/clear #可以明確設置query、fielddata、request來清理特定緩存。
索引刷新
POST http://127.0.0.1:9200/secisland/_refresh
沖洗
POST http://127.0.0.1:9200/secisland/_flush #將數據保存的索引存儲,清除內部事務日誌,釋放內存空間。
合並索引
POST http://127.0.0.1:9200/secisland/_forcemerge 參數: max_num_segments:用於合並的分片數量。為了充分合並,可以設置值為1。默認執行是簡單的檢查是否需要合並,如果需要則執行合並。 only_expunge_deletes:合並過程是否刪除分片中被刪除的文檔。默認是false。 flush:合並後是否執行沖洗,默認是true。
7.文檔管理
增加文檔
PUT http://127.0.0.1:9200/secisland/doc/1 { "a":1 }
- 自動創建索引相關:action.auto_create_index=false 禁用自動創建索引。
index.mapper.dynamic=false 禁用自動映射字段類型。
自動創建索引可以通過索引模板設置索引,
action.auto_create_index=+aaa*,-bbb*,+ccc*,(+表示允許,-表示禁止) - 版本號常用在對事物的處理中,操作的時候指定版本號,系統則會對版本號進行檢查。
- op_type=create 寫入文檔時,如果文檔存在則會報錯,如果不知道操作類型為create,則會更新數據。
更新文檔
PUT http://127.0.0.1:9200/secisland/doc/1/_update { "a":2 }
刪除文檔
DELETE http://127.0.0.1:9200/secisland/doc/1
查詢文檔
GET http://127.0.0.1:9200/secisland/doc/1
多種查詢條件和參數,此處不做詳解。
多文檔操作
POST http://127.0.0.1:9200/_mget { "docs":[ {"_indes":"secisland", "id":"1"}, {"_indes":"secisland", "id":"2"} ] }
塊操作
POST http://127.0.0.1:9200/_bulk {"index":{"_index":"secisland","_id":"10"}} {"field1":"value1"} {"index":{"_index":"secisland","_id":"11"}} {"field1":"value2"}
Elasticsearch技術解析與實戰-索引