Download Latest Version 8.18.1 source code.tar.gz (3.8 MB)
Email in envelope

Get an email when there's a new version of go-elasticsearch

Home / v9.0.0
Name Modified Size InfoDownloads / Week
Parent folder
9.0.0 source code.tar.gz 2025-04-17 4.1 MB
9.0.0 source code.zip 2025-04-17 11.6 MB
README.md 2025-04-17 4.6 kB
Totals: 3 Items   15.8 MB 0
  • The client now requires Go 1.23 or later.

New

  • This release introduces an optional package for the TypedAPI named esdsl.
    It provides a domain-specific language (DSL) for building Elasticsearch queries in Go.
    The DSL is designed to simplify query construction, making it easier to build complex queries without writing raw JSON.

    :::go // create index { // delete index if exists if existsRes, err := es.Indices.Exists("test").IsSuccess(context.Background()); err != nil { log.Println(err) return } else if existsRes { if ok, _ := es.Indices.Delete("test").IsSuccess(context.Background()); !ok { log.Fatalf("Error deleting index: %v\n", err) } log.Println("Index deleted:", "test") } else { log.Println("Index does not exist:", "test") }

    mappings := esdsl.NewTypeMapping().
        AddProperty("name", esdsl.NewTextProperty()).
        AddProperty("age", esdsl.NewIntegerNumberProperty())
    
    createRes, err := es.Indices.Create("test").Mappings(mappings).Do(context.Background())
    if err != nil {
        log.Println(err)
        return
    }
    
    log.Printf("Index created: %#v\n", createRes)
    

    }

    // index document { documents := []Document{ {"Alice", 30}, {"Bob", 25}, {"Charlie", 35}, }

    bulk := es.Bulk().Index("test")
    for _, document := range documents {
        err := bulk.IndexOp(types.IndexOperation{}, document)
        if err != nil {
            log.Println("Error indexing document:", err)
        }
    }
    bulkRes, err := bulk.Refresh(refresh.Waitfor).Do(context.Background())
    if err != nil {
        log.Println(err)
        return
    }
    if bulkRes.Errors {
        log.Println("Some documents failed to index")
        for _, item := range bulkRes.Items {
            for operationType, responseItem := range item {
                if responseItem.Error != nil {
                    log.Println("Operation:", operationType)
                    log.Println("Response:", responseItem)
                }
            }
        }
    }
    indexedDocs := 0
    for _, item := range bulkRes.Items {
        for _, responseItem := range item {
            if responseItem.Error == nil {
                indexedDocs++
            }
        }
    }
    
    log.Println("Documents indexed:", indexedDocs)
    

    }

    // calculate median age { searchRes, err := es.Search(). Index("test"). Size(0). AddAggregation("median_age", esdsl.NewPercentilesAggregation().Field("age").Percents(50)). Do(context.Background()) if err != nil { log.Println(err) return }

    if agg, ok := searchRes.Aggregations["median_age"].(*types.TDigestPercentilesAggregate); ok {
        if val, ok := agg.Values.(map[string]interface{})["50.0"]; ok {
            log.Println("Median age:", val)
        }
    }
    

    }

    // search documents { matchRes, err := es.Search(). Index("test"). Query(esdsl.NewBoolQuery(). Must(esdsl.NewMatchQuery("name", "Alice")). Filter(esdsl.NewNumberRangeQuery("age").Gte(20).Lte(40))). Sort(esdsl.NewSortOptions().AddSortOption("age", esdsl.NewFieldSort(sortorder.Asc))). Size(10). Do(context.Background()) if err != nil { log.Println(err) return } if matchRes.Hits.Total.Value > 0 { for , hit := range matchRes.Hits.Hits { doc := Document{} err := json.Unmarshal(hit.Source, &doc) if err != nil { log.Println("Error unmarshalling document:", err) continue } log.Printf("Document ID: %s, Name: %s, Age: %d\n", *hit.Id_, doc.Name, doc.Age) } } else { log.Println("No documents found") } }

API

  • Updated APIs to 9.0.0

Typed API

Source: README.md, updated 2025-04-17