Heim >Backend-Entwicklung >Golang >Wie führe ich Teilaktualisierungen von Dokumenten in ElasticSearch mit olivere/elastic in Go durch?

Wie führe ich Teilaktualisierungen von Dokumenten in ElasticSearch mit olivere/elastic in Go durch?

DDD
DDDOriginal
2024-10-24 11:49:02853Durchsuche

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

Verwenden Sie die Update-API in olivere/elastic für teilweise Datensatzaktualisierungen in Go

In Go kann die Aktualisierung eines Datensatzes in ElasticSearch teilweise mithilfe von erfolgen die Update-API. Olivere/elastic, ein beliebter Go-Client für ElasticSearch, bietet Funktionen zum Durchführen von Updates. Hier finden Sie eine ausführliche Erklärung zur Verwendung der Update-API in Oilvere/Elastic:

Um ein Teilupdate durchzuführen, verwenden Sie die Methode client.Update(). Sie können den Index, den Typ und die ID des zu aktualisierenden Datensatzes angeben. Mit der Doc()-Methode können Sie die zu aktualisierenden Daten bereitstellen.

<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>

Im obigen Code stellen wir eine Karte mit dem zu aktualisierenden Feld als Schlüssel und dem neuen Wert als Wert bereit. Mit dieser Methode können Sie jedes Feld des Datensatzes aktualisieren.

Alternativer Ansatz (funktioniert nicht)

Obwohl der obige Ansatz einfach und effektiv ist, können Probleme auftreten wenn die Skriptmethode zum Aktualisieren von Datensätzen verwendet wird. Hier ist ein Beispiel für ein skriptbasiertes Update, das nicht erfolgreich war:

<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>

Dieser Ansatz funktioniert möglicherweise aufgrund möglicher Fehler in olivere/elastischer Version 7.8.0 nicht. Es wird empfohlen, beim ersten Ansatz für zuverlässige und konsistente Teilaktualisierungen in ElasticSearch mit olivere/elastic zu bleiben.

Das obige ist der detaillierte Inhalt vonWie führe ich Teilaktualisierungen von Dokumenten in ElasticSearch mit olivere/elastic in Go durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn