ZBLOG

golang es go驱动包操作

除了索引和文档操作外,官方 Elasticsearch 客户端库还提供了许多其他功能,例如:

搜索

可以使用 Search API 来搜索指定索引中的文档。以下是一个示例:

searchBody := `{
    "query": {
        "match": {
            "name": "John"
        }
    }
}`

res, err := es.Search(
    es.Search.WithIndex("my-index"),
    es.Search.WithBody(strings.NewReader(searchBody)),
    es.Search.WithContext(context.Background()),
)

if err != nil {
    log.Fatalf("Error searching documents: %s", err)
}

defer res.Body.Close()

var r map[string]interface{}

if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
    log.Fatalf("Error parsing the response body: %s", err)
}

hits := r["hits"].(map[string]interface{})["hits"].([]interface{})

for _, hit := range hits {
    doc := hit.(map[string]interface{})["_source"].(map[string]interface{})
    fmt.Printf("Name: %s, Age: %d\n", doc["name"], int(doc["age"].(float64)))
}

聚合

可以使用 Aggregation API 来聚合指定索引中的文档。以下是一个示例:

aggsBody := `{
	"aggs": {
		"avg_age": {
			"avg": {
				"field": "age"
			}
		},
		"max_age": {
			"max": {
				"field": "age"
			}
		}
  }
}`

res, err := es.Search(
	es.Search.WithIndex("my-index"),
	es.Search.WithBody(strings.NewReader(aggsBody)),
	es.Search.WithContext(context.Background()),
)

if err != nil {
    log.Fatalf("Error aggregating documents: %s", err)
}

defer res.Body.Close()

var r map[string]interface{}

if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
    log.Fatalf("Error parsing the response body: %s", err)
}

aggs := r["aggregations"].(map[string]interface{})

avgAge := aggs["avg_age"].(map[string]interface{})["value"].(float64)
maxAge := aggs["max_age"].(map[string]interface{})["value"].(float64)

fmt.Printf("Average age: %.2f, Max age: %.0f\n", avgAge, maxAge)

删除文档

删除一个已存在的文档,需要指定文档 ID。以下是一个示例:

res, err := es.Delete(
    "my-index",
    "1",
    es.Delete.WithContext(context.Background()),
)

if err != nil {
    log.Fatalf("Error deleting document: %s", err)
}

defer res.Body.Close()

fmt.Println("Document deleted")

以上是一些官方 Elasticsearch 客户端库中可用的功能示例。除了这些操作,还可以使用许多其他选项和参数来自定义操作。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6763

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?