- Elasticsearch 教程
- Elasticsearch - 首頁
- Elasticsearch - 基本概念
- Elasticsearch - 安裝
- Elasticsearch - 資料填充
- 版本間遷移
- Elasticsearch - API 約定
- Elasticsearch - 文件 API
- Elasticsearch - 搜尋 API
- Elasticsearch - 聚合
- Elasticsearch - 索引 API
- Elasticsearch - CAT API
- Elasticsearch - 叢集 API
- Elasticsearch - 查詢 DSL
- Elasticsearch - 對映
- Elasticsearch - 分析
- Elasticsearch - 模組
- Elasticsearch - 索引模組
- Elasticsearch - Ingest 節點
- Elasticsearch - 管理索引生命週期
- Elasticsearch - SQL 訪問
- Elasticsearch - 監控
- Elasticsearch - 資料彙總
- Elasticsearch - 凍結索引
- Elasticsearch - 測試
- Elasticsearch - Kibana 儀表盤
- Elasticsearch - 按欄位過濾
- Elasticsearch - 資料表
- Elasticsearch - 區域地圖
- Elasticsearch - 餅圖
- Elasticsearch - 面積圖和柱狀圖
- Elasticsearch - 時間序列
- Elasticsearch - 標籤雲
- Elasticsearch - 熱力圖
- Elasticsearch - Canvas
- Elasticsearch - 日誌 UI
- Elasticsearch 有用資源
- Elasticsearch - 快速指南
- Elasticsearch - 有用資源
- Elasticsearch - 討論
Elasticsearch - 文件 API
Elasticsearch 提供單文件 API 和多文件 API,其中 API 呼叫分別針對單個文件和多個文件。
索引 API
當向具有特定對映的相應索引發出請求時,它有助於在索引中新增或更新 JSON 文件。例如,以下請求將 JSON 物件新增到索引 schools 並在 school 對映下:
PUT schools/_doc/5
{
name":"City School", "description":"ICSE", "street":"West End",
"city":"Meerut",
"state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
"fees":3500,
"tags":["fully computerized"], "rating":"4.5"
}
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
自動索引建立
當請求新增 JSON 物件到特定索引並且該索引不存在時,此 API 會自動建立該索引以及該特定 JSON 物件的基礎對映。可以透過將 elasticsearch.yml 檔案中以下引數的值更改為 false 來停用此功能。
action.auto_create_index:false index.mapper.dynamic:false
您還可以限制索引的自動建立,其中僅允許具有特定模式的索引名稱,方法是更改以下引數的值:
action.auto_create_index:+acc*,-bank*
注意 - 這裡 + 表示允許,- 表示不允許。
版本控制
Elasticsearch 還提供版本控制功能。我們可以使用版本查詢引數來指定特定文件的版本。
PUT schools/_doc/5?version=7&version_type=external
{
"name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
"city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
"fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
版本控制是一個即時過程,不受即時搜尋操作的影響。
有兩種最重要的版本控制型別:
內部版本控制
內部版本控制是預設版本,從 1 開始,並在每次更新(包括刪除)時遞增。
外部版本控制
當文件的版本控制儲存在外部系統(如第三方版本控制系統)中時,它將被使用。要啟用此功能,我們需要將 version_type 設定為 external。在這裡,Elasticsearch 將版本號儲存為外部系統指定,並且不會自動遞增它們。
操作型別
操作型別用於強制執行建立操作。這有助於避免覆蓋現有文件。
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
自動 ID 生成
當在索引操作中未指定 ID 時,Elasticsearch 會自動為該文件生成 ID。
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
獲取 API
API 透過對特定文件執行獲取請求來幫助提取型別 JSON 物件。
pre class="prettyprint notranslate" > GET schools/_doc/5
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
此操作是即時的,不受索引重新整理率的影響。
您還可以指定版本,然後 Elasticsearch 將僅獲取該版本的文件。
您還可以指定請求中的 _all,以便 Elasticsearch 可以搜尋每個型別中的該文件 ID,並且它將返回第一個匹配的文件。
您還可以指定您希望從該特定文件的結果中獲取的欄位。
GET schools/_doc/5?_source_includes=name,fees
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
您只需在獲取請求中新增 _source 部分,即可在結果中獲取源部分。
GET schools/_doc/5?_source
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
您還可以透過將 refresh 引數設定為 true 來在執行獲取操作之前重新整理分片。
刪除 API
您可以透過向 Elasticsearch 傳送 HTTP DELETE 請求來刪除特定索引、對映或文件。
DELETE schools/_doc/4
執行以上程式碼後,我們將得到以下結果:
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
可以指定文件的版本來刪除該特定版本。可以指定路由引數以從特定使用者處刪除文件,如果文件不屬於該特定使用者,則操作將失敗。在此操作中,您可以指定與 GET API 相同的重新整理和超時選項。
更新 API
指令碼用於執行此操作,版本控制用於確保在獲取和重新索引期間沒有發生更新。例如,您可以使用指令碼更新學校的費用:
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
執行以上程式碼後,我們將得到以下結果:
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
您可以透過向更新的文件傳送獲取請求來檢查更新。