表屬性設定

FreeMason發表於2019-11-07

版本:7.5

這裡為什麼叫『表的屬性設定』,純個人偏好,覺得好理解,原因:

ES >= 7.0,type 預設 _doc 也只能是 _doc,那麼一個 index 就相當於資料庫的一張表,在 settings 裡面設定的引數是針對整個表的,並非某一個欄位,所以叫它表的屬性設定。

表的屬性設定按是否可更改可分為:

  • (static) 靜態

    • 建立後不能更改,它們只能在建立索引時或在關閉的索引上設定。
  • (dynamic) 動態

    • 建立後,可更改,可以使用 update-index-settings API 動態的在活動索引上更改它們。

WARNING:

更改關閉索引上的靜態或動態索引設定可能導致錯誤的設定,如果不刪除和重新建立索引,就無法糾正這些錯誤。

靜態屬性設定(static index settings)

下面是與任何特定索引模組無關的所有靜態索引設定的列表

屬性名/引數名 中文名 值型別 預設值 說明
index.number_of_shards 分片數量 int 1 分片數量,預設 1,些設定只能在建立時設定。它不能在封閉(關閉)索引上更改。每個索引分片數量限制在 1024 個。這個限制是一個安全限制,用於防止由於資源分配而意外建立可能破壞叢集穩定的索引,可以透過 export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128" 來修改這個限制
index.shard.check_on_startup 是否檢查分片 bool、checksum false 分片在開啟之前是否檢查分片是否損壞,當檢查到損壞時,它將阻止分片被開啟,可選值:
false (預設)開啟碎片時不檢查是否損壞
checksum 只檢查物理損壞
true 檢查物理和邏輯損壞,相對比較耗CPU與記憶體。專家。在大型索引中,檢查碎片可能會花費大量時間,不建議開啟
index.codec 資料儲存的壓縮演算法 string LZ4 資料儲存的壓縮演算法,預設值為 LZ4,可選擇值 best_compression ,比 LZ4 可以獲得更好的壓縮比(即佔據較小的磁碟空間,但儲存效能比 LZ4 低)。
index.routing_partition_size 路由分割槽數 int 1 預設 1,只能在建立時設定。這個值必須小於索引,除非 index.number_of_shards 的值也是 1,其路由演算法為:(hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果該值不設定,則路由演算法為 hash(_routing) % number_of_shardings,_routing 預設值為 _id。更多 詳情
index.load_fixed_bitset_filters_eagerly bool true 指示快取的篩選器是否為巢狀查詢預載入。(bool),預設值:true。最重要的一點,過濾器所處理的查詢部分不需要計算文件得分。在1.4版本以後,執行巢狀查詢時所使用的 bitsets 預設提前載入就好了。這樣做可以使查詢更快但更耗費記憶體。可以透過 index.load_fixed_bitset_filters_eagerl 配置項為 false 來禁用提前載入

動態屬性設定(Dynamic index settings)

下面是所有動態索引設定的列表,不與任何特定的索引模組相關聯:

屬性名/引數名 中文名 值型別 預設值 說明
index.number_of_replicas 副本 int 1 每個分片的副本數量,預設 1,推薦 3-5
index.auto_expand_replicas 副本是否自動擴充套件 bool、string false 副本是否自動擴充套件,設定為以破折號分隔的下界和上界(例如0-5),或將all用於上界(例如0-all)。預設為 false (即禁用)注意:自動擴充套件的副本數量沒有考慮任何其他分配規則,比如分片分配感知、過濾或每個節點的分片總數,如果適用的規則阻止分配所有副本,則可能導致叢集健康狀態變為黃色。
index.search.idle.after string 30s (30 秒) 設定分片多久沒有接收過請求,就會被判定為空閒的時間,預設為30秒。
index.refresh_interval 重新整理頻率 string 1s (1秒) 執行重新整理操作的頻率,該操作使索引的最近更改對搜尋可見, 預設為1秒, 可以設定為-1表示禁用重新整理。
如果顯示不設定該值,那些在至少${index.search.idle.after}秒之前沒有收到過搜尋請求的分片,將不會收到後臺的重新整理請求,一直要等這些分片收到搜尋才會收到後臺的重新整理請求,如果當前搜尋涉及到操作空閒狀態的分片時,重新整理操作會被掛起直到下一次後臺的重新整理操作(1秒之內),此行為旨在在未執行搜尋時自動最佳化預設情況下的批次索引。如果不希望執行此預設邏輯,應當顯示的將重新整理時間間隔設定為1秒。
index.max_result_window int 10000 控制分頁搜尋總記錄數,from + size 的大小不能超過該值,預設為10000。防止佔用過高的記憶體
index.max_inner_result_window int 100 從from+ size的最大值,用於控制top aggregations(頂部聚合),預設為100。內部命中和頂部命中聚合佔用堆記憶體,並且時間與 from + size 成正比,防止佔用過高的記憶體。
index.max_rescore_window int 10000 設定索引的 rescore 請求的 window_size 的最大值, 預設為與 index.max_result_window 的值相同,預設值為 10000,防止佔用過高的記憶體。
index.max_docvalue_fields_search int 100 查詢中允許的最多 docvalue_fields 數量,預設為 100。doc_value 欄位的查詢成本很高,因為它們可能會導致對每個欄位和每個文件執行搜尋。
index.max_script_fields int 32 查詢中允許的最多 script_fields 的數量, 預設為32。
index.max_ngram_diff int 1 NGramTokenizer 和 NGramTokenFilter 的 min_gram 和 max_gram 之間允許的最大差異值,預設為 1。
index.max_shingle_diff int 3 對於 ShingleTokenFilter, max_shingle_size 和 min_shingle_size 之間允許的最大差異。預設為 3。
index.blocks.read_only bool 設定為 true 使索引和索引後設資料只讀,設定為 false 允許寫和後設資料更改。
index.blocks.read_only_allow_delete bool 控制索引及其後設資料在只讀狀態下,是否允許執行刪除,設定 true 表示允許刪除,false 不允許
index.blocks.read bool 是否禁用對索引資料的讀操作
index.blocks.write bool 是否禁用對索引的資料寫操作。設定為 true 可禁用針對索引的資料寫操作。與 read_only 不同,此設定不影響後設資料。例如,可以用寫塊(blocks.write)關閉索引,但不能用 read_only 塊關閉索引。
index.blocks.metadata bool 是否禁用對索引後設資料的讀寫。設定為true可禁用索引後設資料的讀寫。
index.max_refresh_listeners 索引的每個分片上當重新整理索引時最大的可用監聽器數量。這些偵聽器用於實現 refresh=wait_for。
index.analyze.max_token_count int 10000 使用_analyze API可以生成的最大詞項數, 預設為10000
index.highlight.max_analyzed_offset int 10000 highlight(高亮) 請求可被分析的最大字元數,此設定僅在 highlight 請求針對沒有偏移量或 term vector 的索引文字時才會生效, 預設為 1000000。
index.max_terms_count int 65536 可在 term 查詢中使用的最大 term 數,預設值為 65536。
index.max_regex_length int 1000 可在 Regexp 查詢(正則查詢)中使用的正規表示式的最大長度。預設為 1000。
index.routing.allocation.enable 控制索引的分片分配 參考 all、primaries、new_primaries、none all Allocation機制,其主要解決的是如何將索引在ES叢集中在哪些節點上分配分片(例如在Node1是建立的主分片,在其他節點上建立複製分片)。舉個例子,如果叢集中新增加了一個節點,叢集的節點由原來的3個變成了4 可選值:
all 所有型別的分片都可以重新分配,預設。
primaries 只允許分配主分片。
new_primaries 只允許分配新建立的主分片
none 所有的分片都不允許分配。
index.routing.rebalance.enable 索引的分片重新平衡機制 參考 all、primaries、replicas、none all all 是可以對所有的分片進行平衡;primaries 表示只能對主分片進行平衡;replicas 表示只能對副本進行平衡;none 表示對任何分片都不能平衡,也就是禁用了平衡功能。該值一般不需要修改
index.gc_deletes string 60s (60秒) 文件刪除後(刪除後版本號)還可以存活的週期,預設為 60s。
index.default_pipeline 預設管道聚合器,設定此索引的預設接收節點管道(The default ingest node pipeline),如果設定了預設管道但管道不存在,此索引請求將失敗。可以使用pipeline引數覆蓋預設值,名為“_none”的特殊pipeline不執行攝取管道。
index.required_pipeline 必要管道聚合器,此索引所需的攝取節點管道。如果設定了所需的管道且管道不存在,則索引請求將失敗。無法使用管道引數覆蓋所需的管道。不能同時設定預設管道和必需管道。特殊管道名稱_none表示不會執行攝取管道。

寫這遍文章主要參考的 ES 官網文件,同時也查詢不少資料進行橫向比較,看了不少的部落格,比較多,在這裡就不列舉了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
光年之外

相關文章