Elasticsearch索引的基本操作(6)-索引設置

1、索引設置的查看

查看索引的設置通過_settings API,使用GET方法操作。

1.1、查看單個索引的設置

查看索引new_index的設置,操作如下:

GET /new_index/_settings

響應如下:

{
"new_index" : {
"settings" : {
"index" : {
"creation_date" : "1556890383056",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "zzlhCATaSimuyTHerRKjqA",
"version" : {
"created" : "7000099"
},
"provided_name" : "new_index"
}
}
}
}

響應的信息包括了索引的創建日期、主分片數和副本數、uuid等信息。

1.2、查看多個索引的信息

多個索引的信息,可以通過英文逗號“,”指定多個索引名稱,也可以指定通配符匹配多個索引,操作如下:

GET /new_index,new_index_2/_settings
#或
GET /new_index*/_settings

如果響應中包含多個索引的設置信息,則對應的配置會歸屬於對應的索引下,如下所示:

{
"new_index" : {
"settings" : {
...
}
},
"new_index_2" : {
"settings" : {
...
}
},
...
}

1.3、​​​​​​​查看指定配置項的信息

有時查看全部的配置,返回的內容太多了,此時可以通過在參數中指定要查看的配置項,如只查看主分片的數量設置,操作如下:

GET /new_index/_settings/index.number_of_shards

則只會返回當前索引的主分片數量,如下所示:

{
"new_index" : {
"settings" : {
"index" : {

"number_of_shards" : "1"
}
}
}
}

​​​​​​​2、索引設置的修改

Elasticsearch中有一些參數是可以在運行時調整,被稱為動態參數,動態參數可以通過_settings API進行修改,操作時使用PUT方法,可以一次修改一個或者多個動態參數的值,設置完成後對應的配置會立即生效。

​​​​​​​2.1、修改示例

修改索引副本

在有些操作場景中,需要寫入大量的數據,在此期間不需要或者很少對外提供搜索服務,可以考慮將其副本數設置為0,以增加索引的速度,待數據索引完成後,再設置索引的副本數據。

以下操作示例將索引new_index的副本數設置為0,操作如下:

PUT /new_index/_settings
{
"index" : {
"number_of_replicas" : 0
}

}

修改完成後,將會刪除所有副本,後面設置為大於0的值時,副本會自動平衡分配。

修改刷新操作頻率

刷新(refresh)操作是將index-buffer中解析完成的數據段(segment)寫到文件系統緩存中的操作(其默認操作的頻率是間隔1秒鐘),以確保沒有寫入磁盤的數據也可以被搜索到,這個確保了Elasticsearch的準實時性,也確保了Elasticsearch的搜索性能。

但是有時需要大批量的寫入數據,且這些數據不需要立即就被搜索到,如果此時還是默認的1秒鐘的刷新頻率,將會對索引的寫入產生一定的影響,此時也可以修改刷新頻率,讓其在大批量數據寫入期間,不執行刷新頻率,執行完後再調整回來。

將刷新頻率設置為-1,則表示禁用刷新操作,操作如下:

PUT /new_index/_settings
{
"index" : {
"refresh_interval" : -1
}
}

以上兩個值的修改,如果在滿足合適的應用場景之上使用,都可以提升索引的速度。

​​​​​​​2.2、常用的索引動態配置參數

參數名

說明

index.number_of_replicas

每個主分片的副本數,默認為1。

index.auto_expand_replicas

該配置項用於控制集群中副本的數量是否隨集群中數據節點的數量進行擴展,默認值為false表示副本數不隨數據節點擴展。如果希望擴展,可以將值設置為一個數值範圍,如“0-3”表示集群中單個主分片的副本數在0個3個之間,具體情況根據集群中數據節點而定,也可以設置為“0-all”,all表示集群中所有的數據集點的數量。

注:

自動擴展的副本數不會考慮到其它對副本分配可能存在的限制規則,如對分片的識別、過濾或每個節點上總分片的限制,如果適用的規則阻止所有副本的分配置,這可能導致群集運行狀況變為黃色。

index.search.idle.after

設置分片多久沒有接收過請求,就會被判定為空閒的時間,默認為30秒。

index.refresh_interval

執行刷新操作的頻率,該操作使索引的最近更改對搜索可見, 默認為1秒, 可以設置為-1表示禁用刷新。

如果顯示不設置該值,那些在至少${index.search.idle.after}秒之前沒有收到過搜索請求的分片,將不會收到後臺的刷新請求,一直要等這些分片收到搜索才會收到後臺的刷新請求,如果當前搜索涉及到操作空閒狀態的分片時,刷新操作會被掛起直到下一次後臺的刷新操作(1秒之內),此行為旨在在未執行搜索時自動優化默認情況下的批量索引。

如果不希望執行此默認邏輯,應當顯示的將刷新時間間隔設置為1秒。

index.max_result_window

對當前索引在被執行搜索時,限制此索引的from + size的最大值,以避免佔用過大的堆內存, 默認為10000。

index.max_inner_result_window

用於控制頂部聚合from+size的總記錄,以避免佔用過大的堆內存, 默認為100。

index.max_rescore_window

設置索引的rescore請求的window_size的最大值, 默認為與index.max_result_window的值相同,默認值為10000。

index.max_docvalue_fields_search

查詢中允許的最多docvalue_fields數量,默認為100。Doc_value字段的查詢成本很高,因為它們可能會導致對每個字段和每個文檔執行搜索。

index.max_script_fields

查詢中允許的最多script_fields的數量, 默認為32。

index.max_ngram_diff

NGramTokenizer和NGramTokenFilter的min_gram和max_gram之間允許的最大差異值,默認為1。

index.max_shingle_diff

ShingleTokenFilter的max_shingle_size和min_shingle_size之間允許的最大差異值, 默認為3。

index.blocks.read_only

控制索引及其元數據是否為只讀狀態,設置為true表示只讀,false為非只讀。

index.blocks.read_only_allow_delete

控制索引及其元數據在只讀狀態下,是否允許執行刪除,設置true表示允許刪除,false不允許。

index.blocks.read

設置是否允許當前索引可讀,true表示不可讀。

index.blocks.write

設置是否允許當前索引可寫,true表示不可寫。與只讀read_only不同的是,它不影響到對元數據的操作。例如可以關閉一個blocks.write的索引,但是不可以關閉一個read_only狀態的索引。

index.blocks.metadata

控制對metadata的讀寫,true表示不允許讀寫。

index.max_refresh_listeners

索引的每個分片上可用的最大刷新偵聽器數,這些偵聽器用於實現refresh = wait_for的請求。

index.analyze.max_token_count

使用_analyze API可以生成的最大詞項數, 默認為10000。

index.highlight.max_analyzed_offset

highlight請求可被分析的最大字符數,此設置僅在highlight請求針對沒有偏移量或term vector的索引文本時才會生效, 默認為1000000。

index.max_terms_count

可在term查詢中使用的最大term數,默認值為65536。

index.max_regex_length

可以在正則表達式查詢中使用的正則表達式的最大長度, 默認為1000。

index.routing.allocation.enable

控制當前索引的分片分配,其值可以設置為:

  1. all(默認值) - 允許所有分片執行分片分配;
  2. primaries - 僅允許為主分片分配分片;
  3. new_primaries - 僅允許為新創建的主分片分配分片;
  4. none - 不允許執行分片分配;

index.routing.rebalance.enable

設置索引的分片重新平衡策略,其值可以設置為:

  1. all(默認值) - 允許所有的分片重新平衡;
  2. primaries - 僅允許主分片重新平衡;
  3. replicas - 僅允許對副本分片進行重新平衡;
  4. none - 不允許進行分片重新平衡;

index.gc_deletes

設置已刪除文檔的版本號仍可用於後續版本化操作的時間, 默認為60秒。

index.default_pipeline

設置此索引的默認接收節點管道(The default ingest node pipeline),如果設置了默認管道但管道不存在,此索引請求將失敗。可以使用pipeline參數覆蓋默認值,名為“_none”的特殊pipeline不執行攝取管道。

常用配置參看:

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html

2.3、恢復索引項的默認配置

在Elasticsearch中,基本上所有的參數都有默認值,如果由於某種原因需要恢復指定參數為原來的默認值,如將number_of_replicas的值恢復為默認值,則只需要將對應參數的值設置為null即可,操作如下:

PUT /new_index/_settings
{
"index" : {
"number_of_replicas" : null
}
}


分享到:


相關文章: