elasticsearch mapping之store
_source字段存儲(chǔ)的是索引的原始內(nèi)容,那store屬性的設(shè)置是為何呢?es為什么要把store的默認(rèn)取值設(shè)置為no?設(shè)置為yes是否是重復(fù)的存儲(chǔ)呢?
默認(rèn)情況下,字段的值是可以被索引到的(即:index:true),但是沒(méi)有被存儲(chǔ)(即:store: false),而這就意味著該字段可以search到,但是原始字段的值確無(wú)法被檢索。
因?yàn)樽侄蔚闹狄呀?jīng)在_source中有一份了,這是默認(rèn)存儲(chǔ)的。如果文檔的某一字段設(shè)置了 store 為 yes (默認(rèn)為 no),這時(shí)候會(huì)在 _source 存儲(chǔ)之外再為這個(gè)字段獨(dú)立進(jìn)行存儲(chǔ),這么做的目的主要是針對(duì)內(nèi)容比較多的字段,放到 _source 返回的話,因?yàn)開(kāi)source 是把所有字段保存為一份文檔,命中后讀取只需要一次 IO,包含內(nèi)容特別多的字段會(huì)很占帶寬影響性能,通常我們也不需要完整的內(nèi)容返回(可能只關(guān)心摘要),這時(shí)候就沒(méi)必要放到 _source 里一起返回了(當(dāng)然也可以在查詢時(shí)指定返回字段)。
對(duì)內(nèi)容太長(zhǎng)的字段,將 store 設(shè)置為 yes ,一般來(lái)說(shuō)還應(yīng)該在 _source 排除 exclude 掉這個(gè)字段,這時(shí)候索引的字段,不會(huì)保存在 _source 里了,會(huì)獨(dú)立存儲(chǔ)一份,查詢時(shí) _source 里也沒(méi)有這個(gè)字段了,但是還是可以通過(guò)指定返回字段來(lái)獲取,但是會(huì)有額外的 IO 開(kāi)銷,因?yàn)?_source 的讀取只有一次 IO ,而已經(jīng) exclude 并設(shè)置 store 的字段,是獨(dú)立存儲(chǔ)的需要一個(gè)新的 IO 。
例如,如果您的文檔包含a title,a date和非常大的content 字段,您可能只想檢索title和date,而不是從更大的_source字段中抽取想要的字段:
總結(jié)
以上是生活随笔為你收集整理的elasticsearch mapping之store的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: elasticsearch mappin
- 下一篇: elasticsearch mappin