亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Elasticsearch中store field與non-store field的區別是什么

發布時間:2022-04-19 16:22:26 來源:億速云 閱讀:122 作者:iii 欄目:移動開發

這篇文章主要介紹“Elasticsearch中store field與non-store field的區別是什么”,在日常操作中,相信很多人在Elasticsearch中store field與non-store field的區別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Elasticsearch中store field與non-store field的區別是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Elasticsearch中store field與non-store field的區別

在定義index的mapping的時候,我們可以指定某些fields是否要store(默認是不store)

那么他們有什么區別呢?

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "title": {
          "type": "string",
          "store": true 
        },
        "date": {
          "type": "date",
          "store": true 
        },
        "content": {
          "type": "string"
        }
      }
    }
  }
}

其實不管你將store設置為ture or false, elasticsearch都將為我們存儲這些field, 不同的是:

  1. 當store為false時(默認配置),這些field只存儲在"_source" field中。

  2. 當store為true時,這些field的value會存儲在一個跟_source平級的獨立的field中。同時也會存儲在_source中,所以有兩份拷貝。

那么什么情況下需要設置store field呢?一般情況有兩種情況:

  • _source field在索引的mapping 中disable了。這種情況下,如果不將某個field定義成store=true,那些將無法在返回的查詢結果中看到這個field.

  • _source的內容非常大。這時候如果我們想要在返回的_source document中解釋出某個field的值的話,開銷會很大(當然你也可以定義source filtering將減少network overhead),比例某個document中保存的是一本書,所以document中可能有這些field: title, date, content。假如我們只是想查詢書的title 跟date信息,而不需要解釋整個_source(非常大),這個時候我們可以考慮將title, date這些field設置成store=true。

  • 需要注意的是,看起來將field store可以減少查詢的開銷,但其實這樣也會加大disk的訪問頻率。假如你將_source中的10個field都定義store,那么在你查詢這些field的時候會將會有10次disk seek的操作。而返回_source只有一次disk seek的操作。所以這個也是我們在定義的時候需要blance的。


elasticsearch的store屬性跟_source字段

眾所周知_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比較合適。

到此,關于“Elasticsearch中store field與non-store field的區別是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金溪县| 山阴县| 衡阳市| 岢岚县| 常山县| 富阳市| 灵石县| 安龙县| 凤冈县| 临沭县| 同心县| 郯城县| 工布江达县| 昌乐县| 宜丰县| 湟源县| 陇川县| 新乐市| 奈曼旗| 泰来县| 沂源县| 齐河县| 马鞍山市| 梁山县| 梅州市| 淅川县| 九龙城区| 呼伦贝尔市| 河间市| 井陉县| 江津市| 滨州市| 宝坻区| 崇阳县| 成安县| 鄄城县| 科技| 鹤壁市| 灵武市| 浏阳市| 安塞县|