我正在嘗試將我的應用程式配置為使用Java API Client v7.16.3 與 Elastcisearch 服務器 v7.7 互動。但是當我嘗試索引新檔案時,出現以下錯誤:
{"error":"Content-Type header [application/vnd.elasticsearch json; compatible-with=7] is not supported","status":406}
據我了解,原因是值包含的兼容性Content-type標頭compatible-with=7。Elasticsearch v7.7 不支持這種內容型別(而 Elasticsearch v7.15 可以正常使用)。這是我的配置:
fun configElasticsearchRestClient(
host: String,
username: String,
password: String
): ElasticsearchClient {
val elasticsearchRestClient = RestClient.builder(HttpHost.create(host))
.build()
val transport: ElasticsearchTransport = RestClientTransport(
elasticsearchRestClient,
JacksonJsonpMapper()
)
return ElasticsearchClient(transport)
}
這是索引方法:
fun index(document: SomeDocument) {
val indexRequest = IndexRequest.Builder<ObjectNode>()
.index("some-index")
.document(document)
.id(document.getId())
.version(document.getVersion())
.versionType(External)
.build()
elasticsearchClient.index(indexRequest)
}
是否可以禁用 Java API 客戶端的兼容性標頭?或者還有其他方法可以使用 Java API Client for Elasticsearch server v7.7?
uj5u.com熱心網友回復:
您應該始終使用與服務器版本兼容的客戶端庫版本。在這種情況下,您使用的是客戶端庫的最新版本(即 7.16.3)和舊版本的服務器(即 7.7),您不應該這樣做,或者您應該預料到一些向后不兼容的問題:
客戶端必須與集群中的節點具有相同的主要版本(例如 2.x 或 5.x)。客戶端可以連接到具有不同次要版本(例如 2.3.x)的集群,但可能不支持新功能。理想情況下,客戶端應該與集群具有相同的版本。
如果您改用Java 客戶端 7.7,則不會有任何問題。
此外,從最新的Java 客戶端源代碼中可以看出,該compatible-with值被硬編碼到 HTTP 標頭值中。如果發現標頭沒有進行兼容性檢查,則會自動對其進行修改以包含它,因此無法將其關閉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414391.html
標籤:
上一篇:遷移到Elasticsearch6:帶有腳本和引數的請求不再起作用
下一篇:為彈性搜索創建索引時出錯
