国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch:如何修改 nested 字段的值

這篇具有很好參考價值的文章主要介紹了Elasticsearch:如何修改 nested 字段的值。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Nested 類型是 object 數(shù)據(jù)類型的特殊版本,它允許對象數(shù)組以一種可以彼此獨立查詢的方式進(jìn)行索引。在內(nèi)部,嵌套對象將數(shù)組中的每個對象索引為單獨的隱藏文檔,這意味著每個嵌套對象都可以使用 nested query 獨立于其他對象進(jìn)行查詢。每個 nested 對象都被索引為一個單獨的 Lucene 文檔。有關(guān)更多關(guān)于 nested 數(shù)據(jù)類型的文檔,我們可以參考之前的文章 “Elasticsearch: object 及 nested 數(shù)據(jù)類型”。

在使用 Elasticsearch 時,為了系統(tǒng)的效率,我們并不建議經(jīng)常修改文檔,但是在有些時候,我們還必須對已經(jīng)索引過的文檔進(jìn)行修改。針對 nested 類型的字段,我該如何進(jìn)行更新及刪除呢?

讓我們先使用一個例子來進(jìn)行展示。

我們首先來創(chuàng)建一個 developer 的索引:

PUT developer
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "skills": {
        "type": "nested",
        "properties": {
          "language": {
            "type": "keyword"
          },
          "level": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

在上面,我們定義 skills 為一個 nested 數(shù)據(jù)類型。我們使用如下的命令來創(chuàng)建兩個文檔:

POST developer/_doc/101
{
  "name": "zhang san",
  "skills": [
    {
      "language": "ruby",
      "level": "expert"
    },
    {
      "language": "javascript",
      "level": "beginner"
    }
   ]
}
 
POST developer/_doc/102
{
  "name": "li si",
  "skills": [
    {
      "language": "ruby",
      "level": "beginner"
    }
   ]
}

上面的命令寫入了兩個文檔。

添加技能

針對第二個文檔,我們想增加如下的一個技能:

{
   "language": "Python",
    "level" "expert"
}

首先讓我們使用 painless 語言創(chuàng)建我們的腳本。 你可以在參考資料中閱讀有關(guān)它的更多詳細(xì)信息,但熟悉 Java 的人會發(fā)現(xiàn)編碼很簡單。關(guān)于 painless 語音的編程,你可以在文章 “Elastic:開發(fā)者上手指南” 中的 “Painless 編程” 章節(jié)中找到很多文章進(jìn)行參考。

我們的腳本將驗證 skills 字段是否為空,如果是,我們創(chuàng)建列表實例并稍后添加新項目。如果不是,則添加新 skills。?

      if (ctx._source.skills != null) {
         ctx._source.skills.addAll(params.skills);
      } else {
        ctx._source.skills = new ArrayList();
        ctx._source.skills.addAll(params.skills);
      }

最終添加 skills 的代碼是這樣的:

POST developer/_update/102
{
  "script": {
    "source": """
      if (ctx._source.skills != null) {
        ctx._source.skills.addAll(params.skills);
      } else {
        ctx._source.skills = new ArrayList();
        ctx._source.skills.addAll(params.skills);
      }
    """,
    "params": {
      "skills": [
          {
            "language": "Python",
            "level": "expert"
          }
       ]
    }
  }
}

我們通過如下的命令來進(jìn)行驗證:

GET developer/_doc/102

我們得到如下的結(jié)果:

{
  "_index": "developer",
  "_id": "102",
  "_version": 3,
  "_seq_no": 4,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "name": "li si",
    "skills": [
      {
        "language": "ruby",
        "level": "beginner"
      },
      {
        "level": "expert",
        "language": "Python"
      }
    ]
  }
}

從上面,我們可以看出來新的 skills 已經(jīng)被添加進(jìn)去了。

刪除 skills

同樣,我們可以使用如下的代碼來刪除一個技能:

POST developer/_update/102
{
  "script": {
    "source": """
      if (ctx._source.skills != null) {
        for (int i; i < params.skills.length; i++) {
          ctx._source.skills.removeIf(a->
            a.language.equals(params.skills[i].language) &&
            a.level.equals(params.skills[i].level));
        }
      }
    """,
    "params": {
      "skills": [
        {
          "language": "Python",
          "level": "expert"
        }
      ]
    }
  }
}

我們再次使用如下的命令來查看 id 為 102 的文檔:

GET developer/_doc/102

上面的命令返回的值為:

{
  "_index": "developer",
  "_id": "102",
  "_version": 4,
  "_seq_no": 5,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "name": "li si",
    "skills": [
      {
        "language": "ruby",
        "level": "beginner"
      }
    ]
  }
}

我們可以看出來,在上一步添加的 skill,現(xiàn)在已經(jīng)被成功地移除了。文章來源地址http://www.zghlxwxcb.cn/news/detail-623953.html

到了這里,關(guān)于Elasticsearch:如何修改 nested 字段的值的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ElasticSearch修改索引字段類型

    ElasticSearch修改索引字段類型

    線上功能報錯,一看日志是往es中添加數(shù)據(jù)報錯,錯誤日志如下: 說是數(shù)據(jù)中有個字段類型轉(zhuǎn)換錯誤,一查es腳本工具,果然生產(chǎn)es索引中categoryId這個字段是integer類型,而實際是long類型。 es不能直接修改索引字段類型,需要刪除調(diào)新建,具體方法如下 我這次遇到問題的es索引

    2023年04月08日
    瀏覽(34)
  • javaAPI操作Elasticsearch_elasticsearch 修改字段 java api

    javaAPI操作Elasticsearch_elasticsearch 修改字段 java api

    } } import com.zyw.elasticsearchdemo.constants.HotelConstants; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.Create

    2024年04月17日
    瀏覽(23)
  • Elasticsearch 索引管理:使用別名來修改字段類型

    在 Elasticsearch 中,一個常見的問題是如何修改已存在的索引的字段類型。這是一個棘手的問題,因為 Elasticsearch 本身不允許直接修改字段類型。如果刪除現(xiàn)有索引,重新建索引的話則會導(dǎo)致數(shù)據(jù)丟失。有一個方法是使用別名索引,當(dāng)需要調(diào)整索引時可以先新建一個索引,把數(shù)

    2024年02月03日
    瀏覽(31)
  • Elasticsearch解決不能修改索引、字段問題解決方案

    問題1: 由于es索引不能刪除,不能修改,在不影響原數(shù)據(jù)的情況下,并且生產(chǎn)服務(wù)不停機(jī)的情況下,怎么修改索引,并保留原索引內(nèi)的數(shù)據(jù)? 基于kibanna的dev Tools執(zhí)行參數(shù),淘汰postman,kibanna會有提示 1、原來索引起別名job 2、重建索引,數(shù)據(jù)遷移,默認(rèn)是同步執(zhí)行大數(shù)據(jù)量太

    2024年02月12日
    瀏覽(30)
  • 5.elasticsearch映射操作(創(chuàng)建|修改|刪除)及字段類型

    1.本文介紹了 elasticsearch 映射的操作方式,包括映射創(chuàng)建,修改,刪除; 2.映射定義: 映射是定義文檔及其包含的字段如何存儲和索引的過程 。 例如,使用映射來定義: ① 哪些字符串字段應(yīng)該被作為全文檢索字段; ② 哪些字段包含 數(shù)字,日期,及地理位置; ③ 日期格式

    2023年04月12日
    瀏覽(34)
  • ElasticSearch數(shù)據(jù)庫修改分片數(shù)、副本數(shù)及修改mapping字段

    ElasticSearch數(shù)據(jù)庫修改分片數(shù)、副本數(shù)及修改mapping字段

    ????????對于已經(jīng)存在的索引,副本數(shù)可以隨時修改。 示例演示如下: ????????ElasticSearch中的數(shù)據(jù)會被分別存儲在不同的分片上,索引庫的分片數(shù)量是在索引庫創(chuàng)建的時候通過settings去設(shè)置的,如果不設(shè)置,分片數(shù)默認(rèn)是5,分片數(shù)一旦確定就不能改變。分片數(shù)量的設(shè)

    2024年02月02日
    瀏覽(19)
  • ElasticSearch修改分片數(shù)和副本數(shù)及增加字段

    一、修改副本數(shù) PUT test/_settings { ? ? \\\"index\\\": { ? ? ? ? \\\"number_of_replicas\\\" : 1 ? ? } } 二、修改分片數(shù) ElasticSearch中的數(shù)據(jù)會被分別存儲在不同的分片上,索引庫的分片數(shù)量是在索引庫創(chuàng)建的時候通過settings去設(shè)置的,如果不設(shè)置,分片數(shù)默認(rèn)是5,分片數(shù)一旦確定就不能改變。如果

    2024年02月05日
    瀏覽(18)
  • 小程序如何修改緩存中的某一個字段的值;小程序中如何應(yīng)用vant組件 如:van-dropdown-item、van-field

    小程序如何修改緩存中的某一個字段的值;小程序中如何應(yīng)用vant組件 如:van-dropdown-item、van-field

    將數(shù)據(jù)放入指定緩存中。 這里緩存塊的名稱叫‘mydata’,你可以根據(jù)自己的需求,取合適的名字。代碼如下 效果:這里是存了個對象當(dāng)示例。也可以存數(shù)組,字符串等。 使用 wx.getStorageSync(‘myData’),即可取出‘myData’中緩存的數(shù)據(jù)。以下代碼打印結(jié)果為 hello 先取出數(shù)據(jù),

    2024年02月09日
    瀏覽(25)
  • ElasticSearch之Nested對象

    ElasticSearch之Nested對象

    本文看下es的nested嵌套對象相關(guān)內(nèi)容。 在關(guān)系型數(shù)據(jù)庫中定義了6大數(shù)據(jù)庫范式,即1,2,3,BC,4,5的NF(normal form),分別如下: 數(shù)據(jù)庫范式的目的在于減少更新的復(fù)雜度,以及降低磁盤的存儲空間。其中對于第二個問題存儲設(shè)備目前非常廉價而且容量很大,所以不是什么問題

    2024年03月28日
    瀏覽(21)
  • Elasticsearch 復(fù)雜類型 Nested

    復(fù)雜類型 建模到底是個什么東東? 建模解決什么問題? 復(fù)雜類型的的檢索問題 主要解決復(fù)雜類型無法搜索的問題 nested屬于object類型的一種,是Elasticsearch中用于復(fù)雜類型對象數(shù)組的索引操作。Elasticsearch沒有內(nèi)部對象的概念,因此,ES在存儲復(fù)雜類型的時候會把對象的 復(fù)雜層次

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包