簡體   English   中英

為什么Elasticsearch Bulk-API使用“ Content-Type:應用程序/ json”標頭?

[英]Why does Elasticsearch Bulk-API use “Content-Type: application/json” header?

我只是想知道為什么如果請求的主體不是json而是具有多行的文本(每行都是json),則ES為什么使用該標頭。 例如:

{ "create" : { "_index" : "movies", "_type" : "movie", "_id" : "135569" } }
{ "id": "135569", "title" : "Star Trek Beyond", "year":2016 , "genre":["Action", "Adventure", "Sci-Fi"] }
{ "create" : { "_index" : "movies", "_type" : "movie", "_id" : "122886" } }
{ "id": "122886", "title" : "Star Wars: Episode VII - The Force Awakens", "year":2015 , "genre":["Action", "Adventure", "Fantasy", "Sci-Fi", "IMAX"] }
{ "create" : { "_index" : "movies", "_type" : "movie", "_id" : "109487" } }
{ "id": "109487", "title" : "Interstellar", "year":2014 , "genre":["Sci-Fi", "IMAX"] }
{ "create" : { "_index" : "movies", "_type" : "movie", "_id" : "58559" } }
{ "id": "58559", "title" : "Dark Knight, The", "year":2008 , "genre":["Action", "Crime", "Drama", "IMAX"] }
{ "create" : { "_index" : "movies", "_type" : "movie", "_id" : "1924" } }
{ "id": "1924", "title" : "Plan 9 from Outer Space", "year":1959 , "genre":["Horror", "Sci-Fi"] }

盡管不是格式正確的json,這仍將是有效的請求。 在RESTful接口中將某些內容定義為application / json是常見的,即使不是這樣嗎? 您甚至不能從Postman發送它,而只能從cURL發送它,這不驗證主體語法。

從技術上講,在調用_bulk端點時,內容類型標頭應為application/x-ndjson而不是其文檔中所述的 application/json

最后一行數據必須以換行符\\ n結尾。 每個換行符前面都可以有一個回車符\\ r。 向此端點發送請求時,Content-Type標頭應設置為application / x-ndjson。

它不是JSON數組的原因是,當協調節點接收到批量請求時,它可以簡單地通過查看有多少行(即換行符)將其拆分為幾個塊,並將每個塊發送到一個不同的節點以進行處理。處理。 如果內容是JSON,則協調節點將必須全部解析它,並且對於幾個兆字節的批量查詢,這將對性能產生負面影響。

NDJSON是一種方便的格式,用於存儲或流式傳輸可能一次處理一條記錄的結構化數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM