天天看點

elasticsearch中 fieldData

fieldData是幹啥的?

當我們對text類型的字段進行首次聚類、排序、或者執行腳本的時候。将磁盤中的資料建構到記憶體夠中。

預設情況下,大多數字段都已編入索引,這使它們可搜尋。 但是,腳本中的排序,聚合和通路字段值需要與搜尋不同的通路模式。

搜尋需要回答“哪個文檔包含該術語?”這個問題,而排序和彙總則需要回答一個不同的問題:“此字段對該文檔的值是什麼?”。

大多數字段可以将索引時生産的磁盤doc_values(​​doc_values | Elasticsearch Guide [8.1] | Elastic​​)用于此資料通路模式,但是文本(text)字段不支援doc_values。

替代的方案,文本(text)字段使用查詢時記憶體中的資料結構,稱為fielddata。 當我們首次将該字段用于聚合,排序或在腳本中使用時,将按需建構此資料結構。 它是通過從磁盤讀取每個段的整個反向索引,反轉術語↔︎文檔關系并将結果存儲在JVM堆中的記憶體中來建構的。

這是一個昂貴的操作。Fielddata針對text字段在預設時是禁用的 !

例如我們對一個 text類型的字段進行agg聚類操作。發現報錯。這驗證了text類型字段,預設是關閉Fielddata的。

elasticsearch中 fieldData

繼續閱讀