1. 程式人生 > >8、Get API

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會在繼續索引更多資料時清除後臺刪除的文件。