ES 搜索12 (控制字段的存儲選項)

控制字段的存儲選項

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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章