如果透過 Windows 10作業系統上傳,由於 Elastic Cloud 預設是 UTF-8 編碼;但Windows的系統編碼目前仍然不是,所以你可能會遇到像我這樣的狀況。
library("elastic")
# Connect OK!
x <- connect(
host = "ABC123.asia-east1.gcp.elastic-cloud.com",
path = "",
user = "elastic",
pwd = "abc123",
port = 9243,
transport_schema = "https"
)
zh1 <- data.frame( my_value = c("测试"), stringsAsFactors = FALSE)
docs_bulk(x, zh1, "zh_test")
此時上傳是沒有什麼問題的;
但如果是特定文字,就像著名的"許功蓋"
zh2 <- data.frame( my_value = c("許", "功", "蓋"), stringsAsFactors = FALSE)
docs_bulk(x, zh2, "zh_test")
此時回傳的訊息會告訴你資料異常,無法匯入
[[1]]$items[[3]]$index$error
[[1]]$items[[3]]$index$error$type
[1] "mapper_parsing_exception"
[[1]]$items[[3]]$index$error$reason
[1] "failed to parse field [my_value] of type [text] in document with id 'g-I4aHQBHwsQBN75v_wg'. Preview of field's value: ''"
[[1]]$items[[3]]$index$error$caused_by
[[1]]$items[[3]]$index$error$caused_by$type
[1] "i_o_exception"
[[1]]$items[[3]]$index$error$caused_by$reason
[1] "Unexpected end-of-input in VALUE_STRING\n at [Source: (org.elasticsearch.common.bytes.AbstractBytesReference$MarkSupportingStreamInputWrapper); line: 1, column: 20]"
遇到這種狀況,Windows 作業系統基本上就是無解囉。Google後發現 elastic 套件網站(https://docs.ropensci.org/elastic/) ,有中國人反應中文編碼問題,回應中也提到在2年前某個版號後就獲得解決;但目前身處2020年的我,即使我安裝了 Github 上面的開發版本,還是無解。
此時解決的方法,就只剩下透過:
由此可見 WSL2 真的是開發人員的好朋友! 可以暫時不必為了編碼問題所困擾,既然搞定了中文編碼問題;也許接下來的挑戰賽,可以試著上傳一本三國演義小說到 Elastic Cloud 進行檢索呢!