8、Get API
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html
elasticsearch版本:6.5
目錄地址:https://blog.csdn.net/mine_1/article/details/85623429
get API執行使用者通過ID獲取json格式的文件,如下面的例子,獲取twitter索引下面的_doc型別裡面id為0的文件。
GET twitter/_doc/0
得到的響應為:
{ "_index" : "twitter", "_type" : "_doc", "_id" : "0", "_version" : 1, "found": true, "_source" : { "user" : "kimchy", "date" : "2009-11-15T14:12:12", "likes": 0, "message" : "trying out Elasticsearch" } }
結果中包括我們想要得到的文件的_index,_type,_id和version資訊,如果存在滿足條件的文件還會返回檔案的內容_source。
這個介面也可以用HEAD請求,如:
HEAD twiter/_doc/0
(1)Realtime
預設情況下,get api是實時的,不受索引重新整理率的影響(資料在搜尋時可見)。如果文件已更新但尚未重新整理,則get api將在適當位置發出重新整理呼叫,以使文件可見。這還將使上次重新整理後更改的其他文件可見。為了禁用realtime get,可以將realtime引數設定為false。
(2)Source filtering
預設情況下,GET操作返回_source的內容,除非將_source設定為false。您可以使用_source關閉source檢索:
GET twitter/_doc/0?_source=false
如果您只需要完整源中的一個或兩個欄位,則可以使用源包含和源排除引數來包含或篩選您需要的部分。這對於大型文件尤其有用,因為部分檢索可以節省網路開銷。兩個引數都採用逗號分隔的欄位列表或萬用字元表示式。例子:
GET twitter/_doc/0?_source_include=*.id&source_exclude=entities
如果您只想要指定的欄位,可以用下面的這種簡寫形式:
GET twitter/_doc/0?_source=*.id,retweeted
(3) Stored Fields
get操作允許指定一組儲存欄位,這些欄位將通過傳遞stored_fields引數返回。如果請求的欄位store為false,則將忽略它們。例如,考慮以下對映:
PUT twitter
{
"mappings": {
"_doc": {
"properties": {
"counter": {
"type": "integer",
"store": false
},
"tags": {
"type": "keyword",
"store": true
}
}
}
}
}
現在我們新增的文件:
PUT twitter/_doc/1
{
"counter" : 1,
"tags" : ["red"]
}
接下來取出這個文件:
GET twitter/_doc/1?stored_fields=tags,counter
得到的響應為:
{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_version": 1,
"found": true,
"fields": {
"tags": [
"red"
]
}
}
獲取的文件欄位值總是放在fields數組裡面。但是由於counter欄位stored為false,所以當GET的時候被忽略了,查不到值。
還可以用_routing欄位檢索元資料欄位,
PUT twitter/_doc/2?routing=user1
{
"counter":1,
"tags":["white"]
}
GET twitter/_doc/2?routing=user1&stord_fields=tags,counter
得到的響應為:
{
"_index": "twitter",
"_type": "_doc",
"_id": "2",
"_version": 1,
"_routing": "user1",
"found": true,
"fields": {
"tags": [
"white"
]
}
}
store為false的欄位不能被返回。
(4)Getting the _source directly
用/{index}/{type}/{id}/_source請求可以僅返回_sourcez欄位的值,而沒有其他附加資訊,如:
GET twitter/_doc/1/_source
也可以用_source_include和_source_exclude欄位設定_source包含哪些欄位,不包含哪些欄位:
GET twitter/_doc/1/_source?_source_include=*.id&_source_exclude=entities'
(5)Routing
當routing可用時,為了得到指定的文件,也可以提供routing值,如:
GET twitter/_doc/2?routing=user1
這個請求將會得到一個id為2的twitter,並且routing為user1。當routing不對時,將不會得到正確的結果。
(6)preference
preference控制要在哪個分片上執行get請求。預設情況下,操作在碎片副本之間隨機進行。
首選項可以設定為:
- _primary:該操作將只在主分片上執行。
- _local:如果可能的話,該操作最好在本地分配的碎片上執行。
- 自定義(字串)值:自定義值將用於確保相同的碎片將用於相同的自定義值。這有助於在不同重新整理狀態下命中不同碎片時“跳躍值”。示例值可以類似於Web會話ID或使用者名稱。
(7)Refresh
為了在get操作之前重新整理相關的shard並使其可搜尋,可以將refresh引數設定為true。將其設定為true應該在仔細考慮並驗證這不會導致系統負載過重(並減慢索引速度)後進行。
(8)Distributed
get操作被雜湊到一個特定的shard id中執行,然後被重定向到該shard id中的一個副本,並返回結果。副本是主分片及其在該分片ID組中的副本。這意味著我們擁有的副本越多,我們擁有的擴充套件性就越好。
(9)Versioning support
只有當文件的當前版本等於指定版本時,才能使用version引數來檢索文件。對於所有版本型別,此行為都相同,但始終檢索文件的版本型別force除外。請注意,force版本型別已棄用。
在內部,ElasticSearch將舊文件標記為已刪除,並添加了一個全新的文件。舊版本的文件不會立即消失,儘管您將無法訪問它。ElasticSearch會在繼續索引更多資料時清除後臺刪除的文件。