控制字段的存儲選項
ES底層使用Lucene存儲數據,主要包括行存(StoreFiled)、列存(DocValues)和倒排索引(InvertIndex)三部分。 大多數使用場景中,沒有必要同時存儲這三個部分,可以通過下面的參數來做適當調整:
StoreFiled: 行存,其中佔比最大的是source字段,它控制doc原始數據的存儲。在寫入數據時,ES把doc原始數據的整個json結構體當做一個string,存儲爲source字段。查詢時,可以通過source字段拿到當初寫入時的整個json結構體。 所以,如果沒有取出整個原始json結構體的需求,可以通過下面的命令,在mapping中關閉source字段或者只在source中存儲部分字段,數據查詢時仍可通過ES的docvaluefields獲取所有字段的值。
注意:關閉source後, update, updatebyquery, reindex等接口將無法正常使用,所以有update等需求的index不能關閉source。
# 關閉 _source
PUT my_index
{
"mappings":{
"my_type":{
"_source":{
"enabled":false
}
}
}
}
doc_values:控制列存。
ES主要使用列存來支持sorting, aggregations和scripts功能,對於沒有上述需求的字段,可以通過下面的命令關閉docvalues,降低存儲成本。
PUT my_index
{
"mappings":{
"my_type":{
"properties":{
"session_id":{
"type":"keyword",
"doc_values":false
}
}
}
}
}
index:控制倒排索引。
ES默認對於所有字段都開啓了倒排索引,用於查詢。對於沒有查詢需求的字段,可以通過下面的命令關閉倒排索引。
{
"mappings":{
"my_type":{
"properties":{
"session_id":{
"type":"keyword",
"index":false
}
}
}
}
}
all:ES的一個特殊的字段,ES把doc的所有值拼接成一個字符串後,做分詞,然後保存倒排索引,用於支持整個json的全文檢索。
這種需求適用的場景較少,可以通過下面的命令將all字段關閉,節約存儲成本和cpu開銷。(ES6.0+以上的版本不再支持_all字段,不需要設置)
# 關閉 all
PUT my_index
{
"mappings":{
"my_type":{
"_all":{
"enabled":false
}
}
}
}
fieldnames:用於exists查詢,來確認doc裏面某個字段是否存在。沒有需求,可以將其關閉。
# 關閉 all
PUT my_index
{
"mappings":{
"my_type":{
"_field_names":{
"enabled":false
}
}
}
}
作者:右左君
鏈接:https://www.jianshu.com/p/8281545346e8
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。