Top Related Projects
Deprecated: Use the official Elasticsearch client for Go at https://github.com/elastic/go-elasticsearch
A modern text/numeric/geo-spatial/vector indexing library for go
Official Python client for Elasticsearch
Quick Overview
The elastic/go-elasticsearch repository is the official Go client for Elasticsearch. It provides a robust and efficient way to interact with Elasticsearch clusters, allowing developers to perform various operations such as indexing, searching, and managing documents and indices using Go programming language.
Pros
- Native Go implementation with excellent performance
- Comprehensive API coverage for Elasticsearch operations
- Well-documented with extensive examples and guides
- Supports multiple Elasticsearch versions
Cons
- Steep learning curve for developers new to Elasticsearch
- Complex API structure might be overwhelming for simple use cases
- Requires careful error handling and connection management
- Limited built-in high-level abstractions compared to some other clients
Code Examples
- Creating a client and performing a simple search:
cfg := elasticsearch.Config{
Addresses: []string{
"http://localhost:9200",
},
}
es, _ := elasticsearch.NewClient(cfg)
res, _ := es.Search(
es.Search.WithIndex("my-index"),
es.Search.WithBody(strings.NewReader(`{"query":{"match":{"title":"elasticsearch"}}}`)),
)
fmt.Println(res)
- Indexing a document:
doc := `{"title":"Test document","content":"This is a test"}`
res, _ := es.Index(
"my-index",
strings.NewReader(doc),
es.Index.WithDocumentID("1"),
es.Index.WithRefresh("true"),
)
fmt.Println(res)
- Performing an aggregation:
query := `{
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}`
res, _ := es.Search(
es.Search.WithIndex("products"),
es.Search.WithBody(strings.NewReader(query)),
)
fmt.Println(res)
Getting Started
To start using the Elasticsearch Go client:
-
Install the package:
go get github.com/elastic/go-elasticsearch/v8
-
Import the package in your Go code:
import "github.com/elastic/go-elasticsearch/v8"
-
Create a client:
cfg := elasticsearch.Config{ Addresses: []string{"http://localhost:9200"}, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating client: %s", err) }
-
Start using the client to interact with your Elasticsearch cluster.
Competitor Comparisons
Deprecated: Use the official Elasticsearch client for Go at https://github.com/elastic/go-elasticsearch
Pros of elastic
- More mature and feature-rich, with a longer development history
- Extensive documentation and community support
- Provides higher-level abstractions and helper functions for common tasks
Cons of elastic
- Larger codebase and dependencies, potentially increasing build times
- May have a steeper learning curve for beginners
- Not officially maintained by Elastic, which could lead to compatibility issues
Code Comparison
elastic:
client, err := elastic.NewClient()
result, err := client.Index().
Index("tweets").
Type("doc").
Id("1").
BodyJson(tweet).
Do(context.Background())
go-elasticsearch:
es, err := elasticsearch.NewDefaultClient()
res, err := es.Index(
"tweets",
strings.NewReader(`{"message":"Hello World"}`),
es.Index.WithDocumentID("1"),
)
The elastic library provides a more fluent API with method chaining, while go-elasticsearch uses a more low-level approach with separate function calls. The elastic library abstracts away some of the complexity, making it easier to use for common operations. However, go-elasticsearch offers more fine-grained control over requests and is closer to the Elasticsearch REST API.
Both libraries have their strengths, and the choice between them depends on specific project requirements, familiarity with Elasticsearch, and desired level of abstraction.
A modern text/numeric/geo-spatial/vector indexing library for go
Pros of Bleve
- Pure Go implementation, making it easier to embed and deploy in Go applications
- Supports a wider range of storage backends, including in-memory and custom options
- More flexible and customizable for specific use cases
Cons of Bleve
- Generally slower performance compared to Elasticsearch for large-scale operations
- Less mature ecosystem and smaller community support
- Fewer advanced features out-of-the-box, such as machine learning capabilities
Code Comparison
Bleve:
index, _ := bleve.New("example.bleve", mapping)
doc := struct{
ID string
Name string
}{"1", "John Doe"}
index.Index("doc1", doc)
go-elasticsearch:
es, _ := elasticsearch.NewDefaultClient()
doc := map[string]interface{}{
"name": "John Doe",
}
_, _ = es.Index("test-index", strings.NewReader(`{"name":"John Doe"}`), es.Index.WithDocumentID("1"))
Both libraries provide ways to create indexes and add documents, but Bleve's API is more Go-idiomatic, while go-elasticsearch follows Elasticsearch's REST API structure more closely. Bleve allows for direct indexing of Go structs, whereas go-elasticsearch typically works with JSON data.
Official Python client for Elasticsearch
Pros of elasticsearch-py
- Written in Python, which is widely used in data science and analytics
- More mature and feature-rich, with a longer development history
- Extensive documentation and community support
Cons of elasticsearch-py
- Generally slower performance compared to Go implementations
- Python's Global Interpreter Lock (GIL) can limit concurrency in multi-threaded applications
Code Comparison
elasticsearch-py:
from elasticsearch import Elasticsearch
es = Elasticsearch(["http://localhost:9200"])
result = es.search(index="my-index", body={"query": {"match_all": {}}})
go-elasticsearch:
es, _ := elasticsearch.NewDefaultClient()
res, _ := es.Search(
es.Search.WithIndex("my-index"),
es.Search.WithBody(strings.NewReader(`{"query":{"match_all":{}}}`)),
)
Summary
Both elasticsearch-py and go-elasticsearch are official Elasticsearch clients, each with its strengths. elasticsearch-py is more established and benefits from Python's ecosystem, making it ideal for data analysis tasks. go-elasticsearch, while newer, offers better performance and concurrency, making it suitable for high-throughput applications. The choice between them often depends on the specific project requirements and the development team's expertise.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
go-elasticsearch
The official Go client for Elasticsearch.
Download the latest version of Elasticsearch or sign-up for a free trial of Elastic Cloud.
Compatibility
Go
Starting from version 8.12.0
, this library follow the Go language policy. Each major Go release is supported until there are two newer major releases. For example, Go 1.5 was supported until the Go 1.7 release, and Go 1.6 was supported until the Go 1.8 release.
Elasticsearch
Language clients are forward compatible; meaning that clients support communicating with greater or equal minor versions of Elasticsearch. Elasticsearch language clients are only backwards compatible with default distributions and without guarantees made.
When using Go modules, include the version in the import path, and specify either an explicit version or a branch:
require github.com/elastic/go-elasticsearch/v8 v8.0.0
require github.com/elastic/go-elasticsearch/v7 7.17
It's possible to use multiple versions of the client in a single project:
// go.mod
github.com/elastic/go-elasticsearch/v7 v7.17.0
github.com/elastic/go-elasticsearch/v8 v8.0.0
// main.go
import (
elasticsearch7 "github.com/elastic/go-elasticsearch/v7"
elasticsearch8 "github.com/elastic/go-elasticsearch/v8"
)
// ...
es7, _ := elasticsearch7.NewDefaultClient()
es8, _ := elasticsearch8.NewDefaultClient()
The main
branch of the client is compatible with the current master
branch of Elasticsearch.
Installation
Refer to the Installation section of the getting started documentation.
Connecting
Refer to the Connecting section of the getting started documentation.
Operations
- Creating an index
- Indexing documents
- Getting documents
- Searching documents
- Updating documents
- Deleting documents
- Deleting an index
Helpers
The esutil
package provides convenience helpers for working with the client. At the moment, it provides the esutil.JSONReader()
and the esutil.BulkIndexer
helpers.
Examples
The _examples
folder contains a number of recipes and comprehensive examples to get you started with the client, including configuration and customization of the client, using a custom certificate authority (CA) for security (TLS), mocking the transport for unit tests, embedding the client in a custom type, building queries, performing requests individually and in bulk, and parsing the responses.
License
This software is licensed under the Apache 2 license. See NOTICE.
Top Related Projects
Deprecated: Use the official Elasticsearch client for Go at https://github.com/elastic/go-elasticsearch
A modern text/numeric/geo-spatial/vector indexing library for go
Official Python client for Elasticsearch
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot