根據索引、類型和ID獲取文檔html
GET twitter/_doc/1
返回結果以下:數組
{ "_index": "twitter", "_type": "_doc", "_id": "1", "_version": 1, "found": true, "_source": { "user": "kimchy", "post_date": "2009-11-15T14:12:12", "message": "trying out Elasticsearch" } }
可使用HEAD檢查文檔的存在性,例如:網絡
HEAD twitter/_doc/1
返回:200 - OKsession
HEAD twitter/_doc/0
返回:404 - Not Foundapp
默認狀況下,get API是實時的,而且不受索引刷新率的影響(當數據對於搜索可見時)。 若是文檔已更新但還沒有刷新,get API將就地發出刷新調用以使文檔可見。 這也會使自上次刷新可見後的其餘文檔發生更改。 爲了禁用實時GET,能夠將實時參數設置爲false。好比:elasticsearch
GET twitter_01/_doc/1/?realtime=false
默認狀況下,get操做會返回_source字段的內容,除非已使用stored_fields參數或_source字段已禁用。 能夠設置_source=false來關閉_source。好比:ide
GET twitter/_doc/1?_source=false
返回結果以下:post
{ "_index": "twitter", "_type": "_doc", "_id": "1", "_version": 1, "found": true }
若是您只須要_source中的一個或兩個字段,則可使用_source_include&_source_exclude參數來包含或過濾出須要的部分。 這對大型文檔尤爲有用,由於部分檢索能夠節省網絡開銷。 這兩個參數都採用逗號分隔的字段列表或通配符表達式。 例如:測試
GET twitter/_doc/1?_source_include=*.id&_source_exclude=entities
若是您只想指定包含,則可使用較短的表示法:ui
GET twitter/_doc/1?_source=*.id,retweeted
get操做容許指定一組存儲的字段,這些字段將經過傳遞stored_fields參數來返回。 若是請求的字段沒有存儲,它們將被忽略。 好比如下映射:
PUT twitter_01 { "mappings": { "_doc": { "properties": { "counter": { "type": "integer", "store": false }, "tags": { "type": "keyword", "store": true } } } } }
如今咱們添加一個文檔
PUT twitter_01/_doc/1 { "counter" : 1, "tags" : ["red"] }
接下來咱們檢索一把:
GET twitter_01/_doc/1?stored_fields=tags,counter
返回結果以下:
{ "_index": "twitter_01", "_type": "_doc", "_id": "1", "_version": 1, "found": true, "fields": { "tags": [ "red" ] } }
從它本身的文檔中獲取的字段值老是以數組的形式返回。 因爲未存儲計數器字段,所以get請求在嘗試獲取stored_fields時會忽略它。
還能夠像_routing字段同樣檢索元數據字段:
PUT twitter_01/_doc/2?routing=user1 { "counter" : 1, "tags" : ["white"] }
GET twitter_01/_doc/2?routing=user1&stored_fields=tags,counter
返回結果以下:
{ "_index": "twitter_01", "_type": "_doc", "_id": "2", "_version": 1, "_routing": "user1", "found": true, "fields": { "tags": [ "white" ] } }
只有leaf fields(簡單字段)能夠經過stored_field選項返回。 因此對象字段不能被返回,而且這樣的請求將失敗。
使用/{index}/{type}/{id}/_source 方式來獲取文檔的_source字段,而不須要任何額外的內容。 例如:
GET twitter_01/_doc/1/_source
返回內容以下:
{ "counter": 1, "tags": [ "red" ] }
一樣也可使用Source filtering來控制將返回_source的哪些部分:
GET twitter/_doc/1/_source?_source_include=*.id&_source_exclude=entities'
值得注意的是,_source端點還有一個HEAD變體,用於高效地測試文檔_source的存在。 若是現有文檔在映射(mapping)中被禁用,它將不會有_source。
HEAD twitter_01/_doc/1/_source
返回結果:200 - OK
當使用控制路由的能力進行索引時,爲了獲取文檔,還應該提供路由值。 例如:
GET twitter/_doc/2?routing=user1
以上將獲得一個id爲2的tweet,但會根據用戶進行路由。 請注意,在沒有正確路由的狀況下發出get將致使文檔獲取失敗。
控制首選哪一個分片副本執行get請求。 默認狀況下,該操做在分片副本之間隨機選擇。
preference能夠設置的值有:
能夠將refresh參數設置爲true,以便在get操做以前刷新相關分片並使其可搜索。 將其設置爲true應仔細考慮,驗證是否會對系統形成沉重負擔,或者是否會下降索引速度。
get操做被哈希成一個特定的分片ID。 而後它被重定向到該分片ID中的一個副本並返回結果。 副本是該分片ID組中的主分片及其副本。 這意味着擁有越多的副本,將擁有更好的GET擴展。
只有當其版本等於指定的版本時,纔可使用版本參數來檢索文檔。 全部版本類型的行爲都是相同的,除了版本類型爲FORCE會老是檢索文檔。 請注意,FORCE版本類型已棄用。
在內部,Elasticsearch已將舊文檔標記爲已刪除並添加了全新文檔。 舊版本的文檔不會當即消失,儘管你已沒法訪問它。 隨着索引數據愈來愈多,Elasticsearch將在後臺清理已刪除的文檔。
官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html#get-source-filtering