詳解ElasticSearch的store屬性

2021-07-22 17:25:49 字數 1621 閱讀 4033

眾所周知_source欄位儲存的是索引的原始內容,那store屬性的設定是為何呢?es為什麼要把store的預設取值設定為no?設定為yes是否是重複的儲存呢?

我們將乙個field的值寫入es中,要麼是想在這個field上執行search操作(不知道具體的id),要麼執行retrieve操作(根據id來 檢索)。但是,如果不顯式的將該field的store屬性設定為yes,同時_source欄位enabled的情況下,你仍然可以獲取到這個 field的值。這就意味著在一些情況下讓乙個field不被index或者store仍然是有意義的。

當你將乙個field的store屬性設定為true,這個會在lucene層面處理。lucene是倒排索引,可以執行快速的全文檢索,返回符合檢索條 件的文件id列表。在全文索引之外,lucene也提供了儲存欄位的值的特性,以支援提供id的查詢(根據id得到原始資訊)。通常我們在lucene層 面儲存的field的值是跟隨search請求一起返回的(id+field的值)。es並不需要儲存你想返回的每乙個field的值,因為預設情況下每 乙個文件的的完整資訊都已經儲存了,因此可以跟隨查詢結構返回你想要的所有field值。

有一些情況下,顯式的儲存某些field的值是必須的:當_source被disabled的時候,或者你並不想從source中parser來得到 field的值(即使這個過程是自動的)。請記住:從每乙個stored field中獲取值都需要一次磁碟io,如果想獲取多個field的值,就需要多次磁碟io,但是,如果從_source中獲取多個field的值,則只 需要一次磁碟io,因為_source只是乙個字段而已。所以在大多數情況下,從_source中獲取是快速而高效的。

es中預設的設定_source是enable的,儲存整個文件的值。這意味著在執行search操作的時候可以返回整個文件的資訊。如果不想返回這個文 檔的完整資訊,也可以指定要求返回的field,es會自動從_source中抽取出指定field的值返回(比如說highlighting的需求)。

你可以指定一些欄位store為true,這意味著這個field的資料將會被單獨儲存。這時候,如果你要求返回field1(store:yes),es會分辨出field1已經被儲存了,因此不會從_source中載入,而是從field1的儲存塊中載入。

哪些情形下需要顯式的指定store屬性呢?大多數情況並不是必須的。從_source中獲取值是快速而且高效的。如果你的文件長度很長,儲存 _source或者從_source中獲取field的代價很大,你可以顯式的將某些field的store屬性設定為yes。缺點如上邊所說:假設你存 儲了10個field,而如果想獲取這10個field的值,則需要多次的io,如果從_source中獲取則只需要一次,而且_source是被壓縮過 的。

還有一種情形:reindex from some field,對某些字段重建索引的時候。從source中讀取資料然後reindex,和從某些field中讀取資料相比,顯然後者代價更低一些。這些欄位store設定為yes比較合適。

總結:如果對某個field做了索引,則可以查詢。如果store:yes,則可以展示該field的值。

但是如果你儲存了這個doc的資料(_source enable),即使store為no,仍然可以得到field的值(client去解析)。

所以乙個store設定為no 的field,如果_source被disable,則只能檢索不能展示。

elasticsearch配置詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置檔案來設定就行了。下面主要講解下e...

ElasticSearch分片詳解

1.我們能夠傳送請求給集群中任意乙個節點。每個節點都有能力處理任意請求。每個節點都知道任意文件所在的節點 2.新建索引和刪除請求都是寫操作,它們必須在主分片上成功完成才能賦值到相關的複製分片上 3.在主分片和複製分片上成功新建 索引或刪除乙個文件必要的順序步驟 1 客戶端給node1 傳送新建 索引...

elasticsearch集群詳解

在單台es伺服器節點上,隨著業務量的發展索引檔案慢慢增多,會影響到效率和記憶體儲存問題等。如果使用es集群,會將單台伺服器節點的索引檔案使用分片技術,分布式的存放在多個不同的物理機器上,從而可以實現高可用 容錯性等。es核心存放的是索引。將資料拆分成多台節點進行存放。es是如何解決高併發 es是乙個...