Get API

根據索引、類型和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

Realtime

默認狀況下,get API是實時的,而且不受索引刷新率的影響(當數據對於搜索可見時)。 若是文檔已更新但還沒有刷新,get API將就地發出刷新調用以使文檔可見。 這也會使自上次刷新可見後的其餘文檔發生更改。 爲了禁用實時GET,能夠將實時參數設置爲false。好比:elasticsearch

GET twitter_01/_doc/1/?realtime=false

Source filtering

默認狀況下,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

Stored Fields

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選項返回。 因此對象字段不能被返回,而且這樣的請求將失敗。

直接獲取_source

使用/{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

Routing

當使用控制路由的能力進行索引時,爲了獲取文檔,還應該提供路由值。 例如:

GET twitter/_doc/2?routing=user1

以上將獲得一個id爲2的tweet,但會根據用戶進行路由。 請注意,在沒有正確路由的狀況下發出get將致使文檔獲取失敗。

Preference

控制首選哪一個分片副本執行get請求。 默認狀況下,該操做在分片副本之間隨機選擇。
preference能夠設置的值有:

  • _primary:該操做只會去主分片,而且只會在主分片上執行。
  • _local:若是可能,該操做將優選在本地分配的分片上執行。
  • Custom (string) value:自定義值將用於確保相同的自定義值將使用相同的分片。 當在不一樣的刷新狀態下命中不一樣的分片時,這能夠幫助「跳躍值」(jumping values)。 好比能夠是Web session id或 用戶名。

Refresh

能夠將refresh參數設置爲true,以便在get操做以前刷新相關分片並使其可搜索。 將其設置爲true應仔細考慮,驗證是否會對系統形成沉重負擔,或者是否會下降索引速度。

Distributed

get操做被哈希成一個特定的分片ID。 而後它被重定向到該分片ID中的一個副本並返回結果。 副本是該分片ID組中的主分片及其副本。 這意味着擁有越多的副本,將擁有更好的GET擴展。

Versioning support

只有當其版本等於指定的版本時,纔可使用版本參數來檢索文檔。 全部版本類型的行爲都是相同的,除了版本類型爲FORCE會老是檢索文檔。 請注意,FORCE版本類型已棄用。

在內部,Elasticsearch已將舊文檔標記爲已刪除並添加了全新文檔。 舊版本的文檔不會當即消失,儘管你已沒法訪問它。 隨着索引數據愈來愈多,Elasticsearch將在後臺清理已刪除的文檔。

 

 官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html#get-source-filtering

相關文章
相關標籤/搜索