日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch 文档的添加、获取、更新、删除_05

發布時間:2024/9/27 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch 文档的添加、获取、更新、删除_05 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

            • 新建文檔
            • 獲取文檔
            • 批量獲取
            • 文檔更新
            • 查詢更新
            • 刪除文檔
            • 批量操作

新建文檔

首先新建一個索引。

然后向索引中添加一個文檔:

PUT blog/_doc/1 {"title":"6. ElasticSearch 文檔基本操作","date":"2021-12-07","content":"首先新建一個索引。" }

1 表示新建文檔的 id。

添加成功后,響應的 json 如下:

{"_index" : "blog","_type" : "_doc","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 2,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1 }
  • _index 表示文檔索引。
  • _type 表示文檔的類型。
  • _id 表示文檔的 id。
  • _version 表示文檔的版本(更新文檔,版本會自動加 1,針對一個文檔的)。
  • result 表示執行結果。
  • _shards 表示分片信息。
  • _seq_no 和 _primary_term 這兩個也是版本控制用的(針對當前 index)。

添加成功后,可以查看添加的文檔:

當然,添加文檔時,也可以不指定 id,此時系統會默認給出一個 id,如果不指定 id,則需要使用 POST 請求,而不能使用 PUT 請求。

POST blog/_doc {"title":"666","date":"2020-11-05","content":"首先新建一個索引。" }
獲取文檔

Es 中提供了 GET API 來查看存儲在 es 中的文檔。使用方式如下:

GET blog/_doc/1

上面這個命令表示獲取一個 id 為 1 的文檔。

如果獲取不存在的文檔,會返回如下信息:

{"_index" : "blog","_type" : "_doc","_id" : "1","_version" : 1,"_seq_no" : 0,"_primary_term" : 1,"found" : true,"_source" : {"title" : "6. ElasticSearch 文檔基本操作","date" : "2021-12-07","content" : "首先新建一個索引。"} }

如果僅僅只是想探測某一個文檔是否存在,可以使用 head 請求:

如果文檔不存在,響應如下:

HEAD blog/_doc/2

HEAD blog/_doc/1

如果文檔存在,響應如下:

批量獲取

當然也可以批量獲取文檔。

GET blog/_mget {"ids":["1","2"] }
文檔更新
  • 普通更新
    注意,文檔更新一次,version 就會自增 1。

可以直接更新整個文檔:

PUT blog/_doc/1 {"title":"666" }

這種方式,更新的文檔會覆蓋掉原文檔。

  • 大多數時候,我們只是想更新文檔字段,這個可以通過腳本來實現。
POST blog/_update/1 {"script": {"lang": "painless","source":"ctx._source.title=params.title","params": {"title":"666666"}} }

更新的請求格式:POST {index}/_update/{id}

在腳本中,lang 表示腳本語言,painless 是 es 內置的一種腳本語言。source 表示具體執行的腳本,ctx 是一個上下文對象,通過 ctx 可以訪問到 _source、_title 等。

也可以向文檔中添加字段:

POST blog/_update/1 {"script": {"lang": "painless","source":"ctx._source.tags=[\"java\",\"php\"]"} }GET blog/_doc/1

通過腳本語言,也可以修改數組。例如再增加一個 tag:

POST blog/_update/1 {"script":{"lang": "painless","source":"ctx._source.tags.add(\"js\")"} }

當然,也可以使用 if else 構造稍微復雜一點的邏輯。

POST blog/_update/1 {"script": {"lang": "painless","source": "if (ctx._source.tags.contains(\"java\")){ctx.op=\"delete\"}else{ctx.op=\"none\"}"} }
查詢更新

通過條件查詢找到文檔,然后再去更新。

例如將 title 中包含 666 的文檔的 content 修改為 888。

POST blog/_update_by_query {"script": {"source": "ctx._source.content=\"888\"","lang": "painless"},"query": {"term": {"title":"666"}} }
刪除文檔
  • 根據 id 刪除
    從索引中刪除一個文檔。

刪除一個 id 為 1的文檔。

DELETE blog/_doc/1

如果在添加文檔時指定了路由,則刪除文檔時也需要指定路由,否則刪除失敗。

  • 查詢刪除
    查詢刪除是 POST 請求。

例如刪除 title 中包含 666 的文檔

POST blog/_delete_by_query {"query":{"term":{"title":"666"}} }

也可以刪除某一個索引下的所有文檔:

POST blog/_delete_by_query {"query":{"match_all":{}} }
批量操作

es 中通過 Bulk API 可以執行批量索引、批量刪除、批量更新等操作。

首先需要將所有的批量操作寫入一個 JSON 文件中,然后通過 POST 請求將該 JSON 文件上傳并執行。

例如新建一個名為 aaa.json 的文件,內容如下:

首先第一行:index 表示要執行一個索引操作(這個表示一個 action,其他的 action 還有 create,delete,update)。_index 定義了索引名稱,這里表示要創建一個名為 user 的索引,_id 表示新建文檔的 id 為 666。

第二行是第一行操作的參數。

第三行的 update 則表示要更新。

第四行是第三行的參數。

注意,結尾要空出一行。

aaa.json 文件創建成功后,在該目錄下,執行請求命令,如下:

curl -XPOST "http://localhost:9200/user/_bulk" -H "content-type:application/json" --data-binary @aaa.json

執行完成后,就會創建一個名為 user 的索引,同時向該索引中添加一條記錄,再修改該記錄,最終結果如下:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ElasticSearch 文档的添加、获取、更新、删除_05的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。