1. 程式人生 > >Elasticsearch必知必會的乾貨知識二:ES索引操作技巧

Elasticsearch必知必會的乾貨知識二:ES索引操作技巧

該系列上一篇文章《[Elasticsearch必知必會的乾貨知識一:ES索引文件的CRUD](https://www.cnblogs.com/zuowj/p/12209702.html)》 講了如何進行index的增刪改查,本篇則側重講解說明如何對index進行建立、更改、遷移、查詢配置資訊等。 1. 僅建立索引:PUT index ```json PUT /index ``` 2. 新增欄位設定(mappings):PUT index/_mapping/type,如:(properties下均為索引欄位) ```json PUT /index/_mapping/_doc { "properties": { "email": { "type": "keyword" } } } ``` 3. 新增索引設定(settings):PUT /index/_settings,如: ```json PUT /index/_settings { "number_of_shards":"8", "max_inner_result_window":"130000", "max_result_window":"130000", "analysis":{ "analyzer":{ "ngram_analyzer":{ "tokenizer":"ngram_tokenizer" } }, "tokenizer":{ "ngram_tokenizer":{ "token_chars":[ "letter", "digit", "punctuation" ], "type":"ngram", "max_gram":"1" } } } } ``` 4. 新增別名或刪除別名:POST /_aliases 或 PUT /index/_alias/name ,如:(remove表示刪除別名,add表示新增別名) ```json POST /_aliases { "actions" : [ { "remove" : { "index" : "test1", "alias" : "alias1" } }, { "add" : { "index" : "test2", "alias" : "alias1" } } ] } PUT /index/_alias/name exp:/index/_alias/index100 ``` 5. 一次性建立包含完整的別名(alias)、欄位(mappings)、設定(settings)的索引,如: ``` PUT /index_name { "index_name":{ "aliases":{ "index_alias_name":{ } }, "mappings":{ "index_type":{ "dynamic":"false", "properties":{ "doubleField1":{ "type":"double", "null_value":0 }, "keywordField2":{ "type":"keyword", "null_value":"" }, "longField3":{ "type":"long", "null_value":0 }, "textField4":{ "type":"text", "fields":{ "raw":{ "type":"keyword", "null_value":"" } }, "analyzer":"ngram_analyzer" }, "dateField5":{ "type":"date", "null_value":"-62167420800000", "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } }, "settings":{ "number_of_shards":"3", "number_of_replicas":"2", "max_inner_result_window":"130000", "max_result_window":"130000", "analysis":{ "analyzer":{ "ngram_analyzer":{ "tokenizer":"ngram_tokenizer" } }, "tokenizer":{ "ngram_tokenizer":{ "token_chars":[ "letter", "digit", "punctuation" ], "type":"ngram", "max_gram":"1" } } } } } } ``` 6. index自動滾動【Rollover】,即:當索引達到預設的滾動條件時,會自動建立新的索引(index),並將別名(alias)指向最新的索引,原索引將被自動刪除對映,如:(先建立索引並指名索引別名,然後執行_rollover API 且設定滾動的條件值,最後正常的插入文件數,當達到滾動條件後,則會自動觸發index _rollover) ```json POST index_alias_name/_rollover/ { "conditions": { "max_age": "7d", //設定:最大時間7天 "max_docs": 10000,//設定:最大文件記錄數 "max_size": "5gb" //設定:索引最大容量 } } //Response: { "old_index": "舊索引名", "new_index": "新索引名", "rolled_over": true, "dry_run": false, "acknowledged": true, "shards_acknowledged": true, "conditions": { "[max_docs: 10000]": true, "[max_age: 7d]": false, "[max_size: 5gb]": false } } //POST index_alias_name/_doc -d {index文件JSON} 插入10000以上的文件記錄 ``` 7. 重建索引(_reindex),即:一旦索引被建立,則無法直接修改索引欄位的mapping屬性,必需要重建索引然後將舊的索引資料遷移到新的索引中才行(遷移過程底層使用了scroll API ),如: ```json POST _reindex { "conflicts": "proceed",//發生衝突繼續執行 "source": { "index": "old_index", "type": "_doc", "size": 5000, //設定每批遷移的文件記錄數 "_source": ["user", "_doc"], //可設定要遷移的索引欄位,不設定則預設所有欄位 "query": { //可設定要遷移的文件記錄過濾條件 "match_all": { } } }, "dest": { "index": "new_index", "type": "_doc", "version_type": "internal" //"internal"或者不設定,則Elasticsearch強制性的將文件轉儲到目標中,覆蓋具有相同型別和ID的任何內容 } } ``` 其它說明可參見:[ES資料庫重建索引——Reindex(資料遷移) ](https://www.cnblogs.com/Ace-suiyuan008/p/9985249.html) 8. 查詢index的完整定義資訊:GET /index ,如: ```json GET /index ``` 9. 只查詢mapping欄位資訊:GET /index/_mapping (帶s也可以) ```json GET /index/_mapping OR /index/_mappings OR /index/_mapping/_doc【如有多個type可以加上指定type】 ``` 10. 只查詢settings資訊:GET /index/_settings ```json GET /index/_settings