我已經使用 Elasticsearch 作業了幾天。在創建 CRUD 時,我遇到了updateByQuery 方法。我正在使用nestjs,我更新欄位的方式是:
await this.elasticSearch.updateByQuery(
{
index: 'my_index_user',
body:{
query:{
match:{
name: 'user_name',
}
},
script: {
inline : 'ctx._source.name = "new_user_name"'
}
}
}
);
我的問題是:為什么 elasticsearch 需要這種語法來指定欄位名稱'ctx._source.name = "new_user_name"'的新值應該是什么?什么是 ctx._source 是這個背景關系?
uj5u.com熱心網友回復:
如源過濾的官方檔案中所述,使用此您可以獲取_source(發送到 Elasticsearch 的值并按原樣存盤的值,不經過分析程序)中的欄位值。
讓我們舉一個應用分析器(默認)的text欄位的示例,您將值存盤在該欄位中,Elasticsearch 在分析程序中會破壞欄位的值,并且兩個令牌存盤在 Elasticsearch 的倒排索引中, 但如果你想查看原始值 ie ,你可以檢查并獲取它。standardfoo barfoobarfoo bar_source
因此,將原始值(沒有分析程序)放在 中總是更好_source,因此使用此 API,您正在更新那里的欄位值。當您想稍后重新索引到新索引或更改方式時,這也有幫助它被分析為您在 _source 中具有原始值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444317.html
