ES 10 - Elasticsearch的索引別名和索引模板

来源:https://www.cnblogs.com/shoufeng/archive/2019/04/02/10641560.html
-Advertisement-
Play Games

索引模板就是將已經創建好的某個索引參數設置(settings)和索引映射(mapping)保存下來作為模板, 在創建新索引時, 指定使用某個模板就可以直接使用已經定義好的設置和映射. ...


目錄

1 索引模板概述

1.1 什麼是索引模板

索引模板: 就是把已經創建好的某個索引的參數設置(settings)和索引映射(mapping)保存下來作為模板, 在創建新索引時, 指定要使用的模板名, 就可以直接重用已經定義好的模板中的設置和映射.

1.2 索引模板中的內容

(1) settings: 指定index的配置信息, 比如分片數、副本數, tranlog同步條件、refresh策略等信息;

(2) mappings: 指定index的內部構建信息, 主要有:

_all: All Field欄位, 如果開啟, _all欄位就會把所有欄位的內容都包含進來,檢索的時候可以不用指定欄位查詢 —— 會檢索多個欄位, 設置方式: "_all": {"enabled": true};
_source: Source Field欄位, Elasticsearch中為每個文檔都保存一份源數據, 如果不開啟, 也就是"_source": {"enabled": false}, 查詢的時候就只會返迴文檔的ID, 其他的文檔內容需要通過Fields欄位到索引中再次獲取數據, 效率很低. 但若開啟, 索引數據的體積會更大, 此時就可以通過Compress進行壓縮, 並通過incluedsexcludes等方式在field上進行限制 —— 指定義允許哪些欄位存儲到_source中, 哪些不存儲;
properties: 最重要的配置, 是對索引結構和文檔欄位的設置.

1.3 索引模板的用途

索引模板一般用在時間序列相關的索引中.

—— 也就是說, 如果你需要每間隔一定的時間就建立一次索引, 你只需要配置好索引模板, 以後就可以直接使用這個模板中的設置, 不用每次都設置settings和mappings.

索引模板一般與索引別名一起使用.


2 創建索引模板

創建示例: 創建一個商品的索引模板:

PUT _template/shop_template
{
    "template": "shop*",       // 可以通過"shop*"來適配
    "order": 0,                // 模板的權重, 多個模板的時候優先匹配用, 值越大, 權重越高
    "settings": {
        "number_of_shards": 1  // 分片數量, 可以定義其他配置項
    },
    "aliases": {
        "alias_1": {}          // 索引對應的別名
    },
    "mapping": {
        "_default": {          // 預設的配置
            "_source": { "enabled": false },  // 是否保存欄位的原始值
            "_all": { "enabled": false },     // 禁用_all欄位
            "dynamic": "strict"               // 只用定義的欄位, 關閉預設的自動類型推斷
        },
        "type1": {             // 預設的文檔類型設置為type1
            "_source": {"enabled": false},
            "properties": {        // 欄位的映射
                "@timestamp": {    // 具體的欄位映射
                    "type": "date",           
                    "format": "strict_date_optional_time||epoch_millis"
                },
                "@version": {
                    "doc_values": true,
                    "index": "not_analyzed",
                    "type": "string"
                },
                "LogLevel": {
                    "type": "long"
                }
            }
        }
    }
}

說明:

直接修改mapping的優先順序 > 索引模板中的設置;

索引匹配了多個template, 當屬性等配置出現不一致時, 以模板的權重(order屬性的值)為準, 值越大越優先, order的預設值是0.


3 查看索引模板

(1) 查看示例:

GET _template                // 查看所有模板
GET _template/temp*          // 查看與通配符相匹配的模板
GET _template/temp1,temp2    // 查看多個模板
GET _template/shop_template  // 查看指定模板

(2) 判斷模板是否存在:

判斷示例:

HEAD _template/shop_tem

結果說明:

a) 如果存在, 響應結果是: 200 - OK

b) 如果不存在, 響應結果是: 404 - Not Found


4 刪除索引模板

刪除示例:

DELETE _template/shop_template  // 刪除上述創建的模板

如果模板不存在, 響應結果將是空集{}.


5 模板的使用建議

5.1 一個index中不能有多個type

—— Elasticsearch 6.X版本中已經不支持在同一個index下創建多個type.

6.X之前的版本中, 父子文檔的實現是一個索引中定義多個type, 6.X中實現方式改變為join方式.

如果在同一個index下創建多個type, 會報出如下錯誤信息:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Rejecting mapping update to [book_shop] as the final mapping would have more than 1 type: [books, novel_book]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Rejecting mapping update to [book_shop] as the final mapping would have more than 1 type: [books, novel_book]"
  },
  "status": 400
}

錯誤信息指出: 拒絕對[book_shop]的mapping信息進行修改, 因為它作為final mapping(最終態的mapping), 將會有超過2個type.

5.2 設置_source = false

如果你只關心度量結果, 而不是原始文檔的內容, 就設置"_source": {"enabled": false}.

—— 這能節省磁碟空間並減少磁碟IO上的開銷.

你可以把原始的數據存儲在MySQL、HBase等資料庫, 從ES中得到文檔的ID之後, 再到相應的資料庫中獲取數據.

5.3 設置_all = false

如果你確切地知道你要對哪個field做查詢操作, 就設置"_all": {"enabled": false}.

—— 這能實現性能提升, 並節省存儲空間.

5.4 設置dynamic = strict

如果你的數據是結構化數據, 就設置"dynamic": "strict".

—— 把動態類型判斷設置為嚴格, 也就是不允許Elasticsearch為插入的數據進行動態類型設置, 避免註入臟數據.

5.5 使用keyword類型

如果你只關心精確匹配, 就設置UR_Field: {"type": "keyword"}.

—— 這能提高性能, 並節省磁碟的存儲空間.

參考資料

官方文檔 - Index Templates

初探 Elasticsearch Index Template(索引模板)

Elasticsearch之索引模板index template與索引別名index alias

版權聲明

作者: ma_shoufeng(馬瘦風)

出處: 博客園 馬瘦風的博客

您的支持是對博主的極大鼓勵, 感謝您的閱讀.

本文版權歸博主所有, 歡迎轉載, 但請保留此段聲明, 併在文章頁面明顯位置給出原文鏈接, 否則博主保留追究相關人員法律責任的權利.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題描述: centos7,偽分佈模式下,啟動datanode後,通過JPS查看發現沒有相關進程,在日誌文件里也沒有任何提示。通過百度,網上一堆說什麼vesion 的ID不一致,不能解決我的問題。 經過搜索,https://community.hortonworks.com/questions/69 ...
  • 系統信息 arch 顯示機器的處理器架構(1) uname -m 顯示機器的處理器架構(2) uname -r 顯示正在使用的內核版本 dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI) hdparm -i /dev/hda 羅列一個磁碟的架構特性 hdparm -tT / ...
  • 1.安裝DHCP伺服器角色,這樣在netsh下才會有dhcp上下文 2.編寫配置dhcp的腳本 從命令行運行netsh有兩種語法: 比如要獲取已經配置的網路介面列表 1.寫全 其中:-r RemoteComputerName 是指定要操作的遠程主機或本機的電腦名,interface ipv4 是n ...
  • shutdown shutdown 此命令用來安全關閉或重啟Linux系統,系統在關閉之前會通知所有的登錄用戶,系統即將關閉,此時所有新用戶都不可以登錄。 以下截取man手冊的內容(man shutdown): NAME shutdown - bring the system down SYNOPS ...
  • 從mysql資料庫中導出正常資料庫的腳本語句,而後使用腳本語句創建資料庫的過程中,執行語句提示Can't Create Table 'XXX' erro150的錯誤,語句執行中斷,創建table失敗,仔細分析相關語句發現導致此錯誤的原因為創建的外鍵和關聯的表的主鍵類型不匹配。 仔細查看被執行的語句, ...
  • snapshot其實就是一組metadata信息的集合,它可以讓管理員將表恢復到以前的一個狀態。snapshot並不是一份拷貝,它只是一個文件名的列表,並不拷貝數據。一個全的snapshot恢復以為著你可以回滾到原來的表schema和創建snapshot之前的數據。 應用場景: 1獲取:該操作嘗試從 ...
  • [20190402]Library Cache mutex.txt1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Editi ...
  • 本篇文章並非原創,只是看到其中內容講的非常好,搬過來,還望海涵。 原文鏈接地址:http://wpceo.com/user-database-table-design/ 說起用戶表,大概是每個應用/網站立項動工(碼農們)考慮的第一件事情。用戶表結構的設計,算是整個後臺架構的基石。如果基石不穩,待到後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...