在 Go 中,可以使用官方 Elasticsearch 客户端库来进行索引和文档操作。
创建索引
创建一个新的索引,需要指定名称和映射。以下是一个示例:
import (
"context"
"fmt"
"github.com/elastic/go-elasticsearch/v7"
)
func main() {
es, _ := elasticsearch.NewDefaultClient()
mapping := `{
"mappings": {
"properties": {
"name": { "type": "text" },
"age": { "type": "integer" }
}
}
}`
res, err := es.Indices.Create(
[]string{"my-index"},
es.Indices.Create.WithBody(strings.NewReader(mapping)),
es.Indices.Create.WithContext(context.Background()),
)
if err != nil {
log.Fatalf("Error creating index: %s", err)
}
defer res.Body.Close()
fmt.Println("Index created")
}
删除索引
删除一个已存在的索引,只需要指定名称即可。以下是一个示例:
res, err := es.Indices.Delete(
[]string{"my-index"},
es.Indices.Delete.WithContext(context.Background()),
)
if err != nil {
log.Fatalf("Error deleting index: %s", err)
}
defer res.Body.Close()
fmt.Println("Index deleted")
添加文档
向指定的索引中添加文档,需要指定文档 ID 和文档内容。以下是一个示例:
doc := `{
"name": "John",
"age": 30
}`
res, err := es.Index(
"my-index",
strings.NewReader(doc),
es.Index.WithDocumentID("1"),
es.Index.WithContext(context.Background()),
)
if err != nil {
log.Fatalf("Error indexing document: %s", err)
}
defer res.Body.Close()
fmt.Println("Document added")
获取文档
从指定的索引中获取文档,需要指定文档 ID。以下是一个示例:
res, err := es.Get(
"my-index",
"1",
es.Get.WithContext(context.Background()),
)
if err != nil {
log.Fatalf("Error getting document: %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)
}
doc := r["_source"].(map[string]interface{})
fmt.Printf("Name: %s, Age: %d\n", doc["name"], int(doc["age"].(float64)))
更新文档
更新一个已存在的文档,需要指定文档 ID 和更新内容。以下是一个示例:
updateDoc := `{
"doc": {
"age": 35
}
}`
res, err := es.Update(
"my-index",
"1",
strings.NewReader(updateDoc),
es.Update.WithContext(context.Background()),
)
if err != nil {
log.Fatalf("Error updating document: %s", err)
}
defer res.Body.Close()
fmt.Println("Document updated")
以上是在 Go 中使用官方 Elasticsearch 客户端库进行索引和文档操作的一些示例。可以根据具体需求来选择合适的选项和参数。