默認地,Elasticsearch 在 _source 字段存儲代表文檔體的JSON字符串。和所有被存儲的字段一樣, _source 字段在被寫入磁盤之前先會被壓縮。
這個字段的存儲幾乎總是我們想要的,因為它意味着下面的這些:
搜索結果包括了整個可用的文檔——不需要額外的從另一個的數據倉庫來取文檔。
如果沒有 _source 字段,部分 update 請求不會生效。
當你的映射改變時,你需要重新索引你的數據,有了_source字段你可以直接從Elasticsearch這樣做,而不必從另一個(通常是速度更慢的)數據倉庫取回你的所有文檔。
當你不需要看到整個文檔時,單個字段可以從 _source 字段提取和通過 get 或者 search 請求返回。
調試查詢語句更加簡單,因為你可以直接看到每個文檔包括什么,而不是從一列id猜測它們的內容。
然而,存儲 _source 字段的確要使用磁盤空間。如果上面的原因對你來說沒有一個是重要的,你可以用下面的映射禁用 _source 字段:
PUT /my_index
{
"mappings": {
"my_type": {
"_source": {
"enabled": false
}
}
}
}
在一個搜索請求里,你可以通過在請求體中指定 _source 參數,來達到只獲取特定的字段的效果:
GET /_search
{
"query": { "match_all": {}},
"_source": [ "title", "created" ]
}