Go での部分的なレコード更新には、olivere/elastic の Update API を使用します
Go では、ElasticSearch のレコードの更新を部分的に使用して行うことができます。アップデートAPI。 ElasticSearch の人気のある Go クライアントである Olivere/elastic は、更新を実行するための機能を提供します。ここでは、oilvere/elastic で Update API を使用する方法の詳細な説明を示します。
部分的な更新を実行するには、client.Update() メソッドを使用します。更新するレコードのインデックス、タイプ、ID を指定できます。 Doc() メソッドを使用すると、更新するデータを指定できます。
<code class="go">import ( "context" "fmt" "github.com/olivere/elastic/v7" ) func main() { ctx := context.Background() // Connect to ElasticSearch client, err := elastic.NewClient(elastic.SetURL("http://localhost:9200")) if err != nil { // Handle error } // Create example data _, err = client.Update().Index("test3").Type("user").Id("2").Doc(map[string]interface{}{"location": "new location"}).Do(ctx) if err != nil { // Handle error } fmt.Println("Record updated!") }</code>
上記のコードでは、更新するフィールドをキーとして、新しい値を値としてマップを提供します。このメソッドを使用して、レコードの任意のフィールドを更新できます。
代替アプローチ (機能しません)
上記のアプローチはシンプルで効果的ですが、問題が発生する可能性があります。スクリプト メソッドを使用してレコードを更新する場合。失敗したスクリプトベースの更新の例を次に示します。
<code class="go">// Update record using script script := elastic.NewScript("ctx._source.location = loc").Params(map[string]interface{}{"loc": message}).Lang("groovy") _, err = client.Update().Index("test3").Type("user").Id("2").Script(script).Do(ctx)</code>
このアプローチは、olivere/elastic バージョン 7.8.0 の潜在的なバグにより機能しない可能性があります。 ElasticSearch で、olivere/elastic を使用した信頼性と一貫性のある部分更新を行うには、最初のアプローチに固執することをお勧めします。
以上がGo のolivere/elastic を使用して ElasticSearch で部分的なドキュメント更新を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。