欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Elasticsearch中store field與non-store field的區(qū)別說明

 更新時(shí)間:2021年07月12日 10:52:40   作者:林大蟲子  
這篇文章主要介紹了Elasticsearch中store field與non-store field的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Elasticsearch中store field與non-store field的區(qū)別

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

那么他們有什么區(qū)別呢?

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

其實(shí)不管你將store設(shè)置為ture or false, elasticsearch都將為我們存儲(chǔ)這些field, 不同的是:

  1. 當(dāng)store為false時(shí)(默認(rèn)配置),這些field只存儲(chǔ)在"_source" field中。
  2. 當(dāng)store為true時(shí),這些field的value會(huì)存儲(chǔ)在一個(gè)跟_source平級(jí)的獨(dú)立的field中。同時(shí)也會(huì)存儲(chǔ)在_source中,所以有兩份拷貝。

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

  • _source field在索引的mapping 中disable了。這種情況下,如果不將某個(gè)field定義成store=true,那些將無法在返回的查詢結(jié)果中看到這個(gè)field.
  • _source的內(nèi)容非常大。這時(shí)候如果我們想要在返回的_source document中解釋出某個(gè)field的值的話,開銷會(huì)很大(當(dāng)然你也可以定義source filtering將減少network overhead),比例某個(gè)document中保存的是一本書,所以document中可能有這些field: title, date, content。假如我們只是想查詢書的title 跟date信息,而不需要解釋整個(gè)_source(非常大),這個(gè)時(shí)候我們可以考慮將title, date這些field設(shè)置成store=true。
  • 需要注意的是,看起來將field store可以減少查詢的開銷,但其實(shí)這樣也會(huì)加大disk的訪問頻率。假如你將_source中的10個(gè)field都定義store,那么在你查詢這些field的時(shí)候會(huì)將會(huì)有10次disk seek的操作。而返回_source只有一次disk seek的操作。所以這個(gè)也是我們?cè)诙x的時(shí)候需要blance的。

elasticsearch的store屬性跟_source字段

眾所周知_source字段存儲(chǔ)的是索引的原始內(nèi)容,那store屬性的設(shè)置是為何呢?es為什么要把store的默認(rèn)取值設(shè)置為no?設(shè)置為yes是否是重復(fù)的存儲(chǔ)呢?

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

當(dāng)你將一個(gè)field的store屬性設(shè)置為true,這個(gè)會(huì)在lucene層面處理。lucene是倒排索引,可以執(zhí)行快速的全文檢索,返回符合檢索條件的文檔id列表。在全文索引之外,lucene也提供了存儲(chǔ)字段的值的特性,以支持提供id的查詢(根據(jù)id得到原始信息)。通常我們?cè)趌ucene層面存儲(chǔ)的field的值是跟隨search請(qǐng)求一起返回的(id+field的值)。es并不需要存儲(chǔ)你想返回的每一個(gè)field的值,因?yàn)槟J(rèn)情況下每一個(gè)文檔的的完整信息都已經(jīng)存儲(chǔ)了,因此可以跟隨查詢結(jié)構(gòu)返回你想要的所有field值。

有一些情況下,顯式的存儲(chǔ)某些field的值是必須的:當(dāng)_source被disabled的時(shí)候,或者你并不想從source中parser來得到field的值(即使這個(gè)過程是自動(dòng)的)。請(qǐng)記住:從每一個(gè)stored field中獲取值都需要一次磁盤io,如果想獲取多個(gè)field的值,就需要多次磁盤io,但是,如果從_source中獲取多個(gè)field的值,則只需要一次磁盤io,因?yàn)開source只是一個(gè)字段而已。所以在大多數(shù)情況下,從_source中獲取是快速而高效的。

es中默認(rèn)的設(shè)置_source是enable的,存儲(chǔ)整個(gè)文檔的值。這意味著在執(zhí)行search操作的時(shí)候可以返回整個(gè)文檔的信息。如果不想返回這個(gè)文檔的完整信息,也可以指定要求返回的field,es會(huì)自動(dòng)從_source中抽取出指定field的值返回(比如說highlighting的需求)。

你可以指定一些字段store為true,這意味著這個(gè)field的數(shù)據(jù)將會(huì)被單獨(dú)存儲(chǔ)。這時(shí)候,如果你要求返回field1(store:yes),es會(huì)分辨出field1已經(jīng)被存儲(chǔ)了,因此不會(huì)從_source中加載,而是從field1的存儲(chǔ)塊中加載。

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

還有一種情形:reindex from some field,對(duì)某些字段重建索引的時(shí)候。從source中讀取數(shù)據(jù)然后reindex,和從某些field中讀取數(shù)據(jù)相比,顯然后者代價(jià)更低一些。這些字段store設(shè)置為yes比較合適。

總結(jié):

如果對(duì)某個(gè)field做了索引,則可以查詢。如果store:yes,則可以展示該field的值。

但是如果你存儲(chǔ)了這個(gè)doc的數(shù)據(jù)(_source enable),即使store為no,仍然可以得到field的值(client去解析)。

所以一個(gè)store設(shè)置為no 的field,如果_source被disable,則只能檢索不能展示。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis執(zhí)行動(dòng)態(tài)SQL的方法

    MyBatis執(zhí)行動(dòng)態(tài)SQL的方法

    今天小編就為大家分享一篇關(guān)于MyBatis執(zhí)行動(dòng)態(tài)SQL的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)

    Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)

    RequestMapping、@PostMapping和@GetMapping是三個(gè)非常常用的注解,本文就來介紹一下這三種注解的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Java設(shè)計(jì)模式之動(dòng)態(tài)代理

    Java設(shè)計(jì)模式之動(dòng)態(tài)代理

    今天小編就為大家分享一篇關(guān)于Java設(shè)計(jì)模式之動(dòng)態(tài)代理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Mybatis批量插入返回插入成功后的主鍵id操作

    Mybatis批量插入返回插入成功后的主鍵id操作

    這篇文章主要介紹了Mybatis批量插入返回插入成功后的主鍵id操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案

    java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案

    這篇文章主要為大家介紹了java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解springboot設(shè)置默認(rèn)參數(shù)Springboot.setDefaultProperties(map)不生效解決

    詳解springboot設(shè)置默認(rèn)參數(shù)Springboot.setDefaultProperties(map)不生效解決

    這篇文章主要介紹了詳解springboot設(shè)置默認(rèn)參數(shù)Springboot.setDefaultProperties(map)不生效解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • JavaMe開發(fā)繪制文本框TextEdit

    JavaMe開發(fā)繪制文本框TextEdit

    在JavaMe連載(3)-也說MVC設(shè)計(jì)模式 一文中提到了一個(gè)TextEdit類,但沒有給出具體實(shí)現(xiàn),TextEdit是采用GameCanvas繪制的文本編輯器。本文結(jié)合實(shí)例給出實(shí)現(xiàn)的方法。
    2015-09-09
  • Spring Boot應(yīng)用上傳文件時(shí)報(bào)錯(cuò)的原因及解決方案

    Spring Boot應(yīng)用上傳文件時(shí)報(bào)錯(cuò)的原因及解決方案

    這篇文章主要介紹了Spring Boot應(yīng)用上傳文件時(shí)報(bào)錯(cuò)的原因及解決方案,幫助大家更好的理解和學(xué)習(xí)使用spring boot框架,感興趣的朋友可以了解下
    2021-02-02
  • 如何在spring boot中進(jìn)行參數(shù)校驗(yàn)示例詳解

    如何在spring boot中進(jìn)行參數(shù)校驗(yàn)示例詳解

    這篇文章主要介紹了如何在spring-boot中進(jìn)行參數(shù)校驗(yàn)及l(fā)ombok的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java整合mybatis實(shí)現(xiàn)過濾數(shù)據(jù)

    Java整合mybatis實(shí)現(xiàn)過濾數(shù)據(jù)

    這篇文章主要介紹了Java整合mybatis實(shí)現(xiàn)過濾數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01

最新評(píng)論