Go实战全家桶之八:统一ES服务接口之通用查询嵌套查询之封装与增删改API
package main
import (
"fmt"
"github.com/olivere/elastic"
)
// 假设Elasticsearch客户端已经创建并配置好,这里我们使用*elastic.Client作为客户端的类型
var client *elastic.Client
// 初始化Elasticsearch客户端
func initClient() {
var err error
client, err = elastic.NewSimpleClient(elastic.SetURL("http://localhost:9200/"))
if err != nil {
panic(err)
}
}
// 封装通用查询
func queryWrapper(query elastic.Query) *elastic.BoolQuery {
return elastic.NewBoolQuery().Must(query)
}
// 封装嵌套查询
func nestedQueryWrapper(path string, query elastic.Query) *elastic.NestedQuery {
return elastic.NewNestedQuery(path).Query(query)
}
// 创建索引
func createIndex(index string) {
_, err := client.CreateIndex(index).Do(context.Background())
if err != nil {
panic(err)
}
}
// 删除索引
func deleteIndex(index string) {
_, err := client.DeleteIndex(index).Do(context.Background())
if err != nil {
panic(err)
}
}
// 添加文档
func addDocument(index string, document interface{}) {
_, err := client.Index().
Index(index).
BodyJson(document).
Do(context.Background())
if err != nil {
panic(err)
}
}
// 更新文档
func updateDocument(index, id string, document interface{}) {
_, err := client.Update().
Index(index).
Id(id).
Doc(document).
Do(context.Background())
if err != nil {
panic(err)
}
}
// 删除文档
func deleteDocument(index, id string) {
_, err := client.Delete().
Index(index).
Id(id).
Do(context.Background())
if err != nil {
panic(err)
}
}
func main() {
initClient()
// 示例:创建一个名为"example_index"的索引
createIndex("example_index")
// 示例:添加一个文档到"example_index"
addDocument("example_index", map[string]interface{}{
"name": "John Doe",
"age": 30,
})
// 示例:更新"example_index"中ID为"1"的文档
updateDocument("example_index", "1", map[string]interface{}{
"age": 31,
})
// 示例:删除"example_index"中ID为"1"的文档
deleteDocument("example_index", "1")
// 示例:删除名为"example_index"的索引
deleteIndex("example_index")
}
这段代码展示了如何使用Elasticsearch的Go客户端库(例如olivere/elastic)来创建和管理索引,添加、更新和删除文档。它还演示了如何封装通用查询和嵌套查询,以便在应用程序中复用。这是一个简化的例子,实际应用中可能需要更复杂的逻辑来处理错误和其他边缘情况。
评论已关闭