ホームページ  >  記事  >  バックエンド開発  >  Go のolivere/elastic を使用して ElasticSearch で部分的なドキュメント更新を実行する方法

Go のolivere/elastic を使用して ElasticSearch で部分的なドキュメント更新を実行する方法

DDD
DDDオリジナル
2024-10-24 11:49:02750ブラウズ

How to Perform Partial Document Updates in ElasticSearch with olivere/elastic in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。