Elasticsearch6.x查詢api


1.獲取API

get API允許根據其id從索引中獲取類型化的JSON文檔。以下示例從名為twitter的索引中獲取一個JSON文檔,該索引名為_doc為id,值為0:

curl -X GET "localhost:9200/twitter/_doc/0"

上述get操作的結果是:

{
    "_index" : "twitter",
    "_type" : "_doc",
    "_id" : "0",
    "_version" : 1,
    "_seq_no" : 10,
    "_primary_term" : 1,
    "found": true,
    "_source" : {
        "user" : "kimchy",
        "date" : "2009-11-15T14:12:12",
        "likes": 0,
        "message" : "trying out Elasticsearch"
    }
}

上述結果包括檢索文檔的_index_type_id,和_version ,包括實際文檔的_source 文檔

2.實時性

默認情況下,get API是實時的,並且不受索引刷新率的影響。

如果文檔已更新但尚未刷新,則get API將就地發出刷新調用以使文檔可見。

這也將使上次刷新后其他文檔發生變化。為了禁用實時GET,可以將realtime參數設置false

3.源過濾

默認情況下,除非您使用了stored_fields參數或_source禁用了該字段,否則get操作將返回_source字段的內容您可以_source使用以下_source參數關閉檢索

curl -X GET "localhost:9200/twitter/_doc/0?_source=false"

如果您只需要完整的一個或兩個字段,則_source可以使用_source_includes 和_source_excludes參數來包含或過濾掉您需要的部分。

這對於大型文檔尤其有用,其中部分檢索可以節省網絡開銷。這兩個參數都使用逗號分隔的字段列表或通配符表達式。例:

curl -X GET "localhost:9200/twitter/_doc/0?_source_includes=*.id&_source_excludes=entities"

如果您只想指定包含,則可以使用較短的表示法:

curl -X GET "localhost:9200/twitter/_doc/0?_source=*.id,retweeted"

4.存儲的字段

get操作允許指定將通過傳遞stored_fields參數返回的一組存儲字段如果未存儲請求的字段,則將忽略它們。例如,考慮以下映射:

curl -X PUT "localhost:9200/twitter" -H 'Content-Type: application/json' -d'
{
   "mappings": {
      "_doc": {
         "properties": {
            "counter": {
               "type": "integer",
               "store": false
            },
            "tags": {
               "type": "keyword",
               "store": true
            }
         }
      }
   }
}
'

現在我們可以添加一個文檔:

curl -X PUT "localhost:9200/twitter/_doc/1" -H 'Content-Type: application/json' -d'
{
    "counter" : 1,
    "tags" : ["red"]
}
'

然后嘗試檢索它:

curl -X GET "localhost:9200/twitter/_doc/1?stored_fields=tags,counter"

上述get操作的結果是:

{
   "_index": "twitter",
   "_type": "_doc",
   "_id": "1",
   "_version": 1,
   "_seq_no" : 22,
   "_primary_term" : 1,
   "found": true,
   "fields": {
      "tags": [
         "red"
      ]
   }
}

從文檔本身獲取的字段值始終作為數組返回。由於該counter字段未存儲,因此get請求在嘗試獲取時直接忽略它

也可以檢索字段之類的元數據字段_routing

curl -X PUT "localhost:9200/twitter/_doc/2?routing=user1" -H 'Content-Type: application/json' -d'
{
    "counter" : 1,
    "tags" : ["white"]
}
'
curl -X GET "localhost:9200/twitter/_doc/2?routing=user1&stored_fields=tags,counter"

上述get操作的結果是:

{
   "_index": "twitter",
   "_type": "_doc",
   "_id": "2",
   "_version": 1,
   "_seq_no" : 13,
   "_primary_term" : 1,
   "_routing": "user1",
   "found": true,
   "fields": {
      "tags": [
         "white"
      ]
   }
}

此外,只有葉子字段可以通過stored_field選項返回因此無法返回對象字段,此類請求將失敗。

 

5.直接獲取_source

使用/{index}/{type}/{id}/_source端點只獲取_source文檔字段,而不包含任何其他內容。例如:

curl -X GET "localhost:9200/twitter/_doc/1/_source"

6.路由

使用控制路由的能力進行索引時,為了獲取文檔,查詢時需要提供相同的路由值。例如

curl -X GET "localhost:9200/twitter/_doc/2?routing=user1"

以上將獲得帶有id的推文2,但將根據用戶進行路由。請注意,在沒有正確路由的情況下發出get將導致無法獲取文檔。

7.查詢偏好設置

控制選擇哪個分片副本執行get請求。默認情況下,操作在分片復制副本之間隨機化。

preference可設置為:

_primary
該操作將僅在主分片上執行。
_local
如果可能,操作將優選在本地分配的分片上執行。
自定義(字符串)值
將使用自定義值來保證相同的分片將用於相同的自定義值。

8.刷新

可以在get之前將refresh設置為true,保證可搜索到最新數據。設置true應該是在經過仔細考慮和驗證后,這會導致系統負載過重(並減慢索引)。

9.分布式

get操作被散列為特定的分片ID。然后它被重定向到該分片ID中的一個副本並返回結果。副本可以是主分片或其分片副本。這意味着我們擁有的副本越多,我們將擁有更好的GET縮放。

10.版本控制支持

version僅當文檔的當前版本等於指定的版本時,才可以使用該參數檢索文檔。對於所有版本類型,此行為都是相同的,

在內部,Elasticsearch將舊文檔標記為已刪除並添加了一個全新的文檔。舊版本的文檔不會立即消失,但您將無法訪問它。當您繼續索引更多數據時,Elasticsearch會在后台清除已刪除的文檔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM