创建客户端
es, err := elasticsearch.NewClient(elasticsearch.Config{
Addresses:[]string{"http://127.0.0.1:9200"},
Username: "elastic",
Password: "elastic",
})
if err != nil {
log.Fatalf("Error creating the client: %s", err)
}
向elasticearch中添加数据
第一种方式
func add(es *elasticsearch.Client){
param := `{"title":"你好,%d","id":%d}`
req := esapi.IndexRequest{
Index: "test",
//DocumentID: strconv.Itoa(i + 1),
//Body: strings.NewReader(`{"title" : "` + title + `"}`),
Refresh: "true",
}
str := fmt.Sprintf(param, i,i)
req.DocumentID = strconv.Itoa(i)
req.Body = strings.NewReader(str)
res, err := req.Do(context.Background(), es)
defer res.Body.Close()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(str)
}
第二种方式
func add2(es *elasticsearch.Client, i int){
param := `{"title":"你好,%s","id":%d}`
str := fmt.Sprintf(param, i, i)
res, err := es.Create("test", strconv.Itoa(i), strings.NewReader(str))
defer res.Body.Close()
fmt.Println(res.Body,err)
}
删除数据
通过DocumentID删除
//通过文档id删除
func delete(es *elasticsearch.Client, id string){
res, err := es.Delete("test", id)
defer res.Body.Close()
fmt.Println(res.Body,err)
}
通过条件删除
//删除title字段的值中有param字符串的项
func delete(es *elasticsearch.Client, param string){
q := map[string]interface{}{
"match": map[string]interface{}{
"title": param,
},
}
query := map[string]interface{}{
"query":q,
}
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(query); err != nil {
log.Fatalf("Error encoding query: %s", err)
}
res, err := es.DeleteByQuery([]string{"test"}, &buf)
defer res.Body.Close()
fmt.Println(res.Body,err)
}
查询数据
第一种方式查询
//条件分页查询
func getList(offset,limit int, param string, es *elasticsearch.Client){
var r map[string]interface{}
var req = make(map[string]interface{})
//查询结果通过id字段进行升序排序
req["sort"] = map[string]interface{}{
"id":map[string]interface{}{
"order": "asc",
},
}
//查询title字段中存在param的项
if param != "" {
q := map[string]interface{}{
"match": map[string]interface{}{
"title": param,
},
}
req["query"] = q
}
//起始项
if offset > 0{
req["from"] = offset
}
//查询条数
if limit > 0{
req["size"] = limit
}
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(req); err != nil {
log.Fatalf("Error encoding query: %s", err)
}
// 执行搜索请求.
res, err := es.Search(
es.Search.WithContext(context.Background()),
es.Search.WithIndex("test"),
es.Search.WithBody(&buf),
es.Search.WithTrackTotalHits(true),
es.Search.WithPretty(),
)
if err != nil {
log.Fatalf("Error getting response: %s", err)
}
defer res.Body.Close()
if res.IsError() {
var e map[string]interface{}
if err := json.NewDecoder(res.Body).Decode(&e); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
} else {
// Print the response status and error information.
log.Fatalf("[%s] %s: %s",
res.Status(),
e["error"].(map[string]interface{})["type"],
e["error"].(map[string]interface{})["reason"],
)
}
}
if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
}
//marshal, err := json.Marshal(r)
//fmt.Println(string(marshal),err)
//fmt.Println(r)
// 打印响应状态,结果数和请求持续时间.
log.Printf(
"[%s] %d hits; took: %dms",
res.Status(),
int(r["hits"].(map[string]interface{})["total"].(map[string]interface{})["value"].(float64)),
int(r["took"].(float64)),
)
// 打印每次匹配的ID和文档来源.
for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) {
log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])
}
log.Println(strings.Repeat("=", 37))
}
第二种查询方式
func getList2(offset,limit int, param string, es *elasticsearch.Client){
//str := `{"match": {"title": "`+ param + `"}}`
req := esapi.SearchRequest{
Index: []string{"test"},
Size: &limit,
From: &offset,
Query: `title:`+ param,
Sort: []string{"id"},
Source: []string{"title"},
}
res, err := req.Do(context.Background(),es)
if err != nil {
log.Fatalf("Error getting response: %s", err)
}
defer res.Body.Close()
if res.IsError() {
var e map[string]interface{}
if err := json.NewDecoder(res.Body).Decode(&e); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
} else {
// Print the response status and error information.
log.Fatalf("[%s] %s: %s",
res.Status(),
e["error"].(map[string]interface{})["type"],
e["error"].(map[string]interface{})["reason"],
)
}
}
var r map[string]interface{}
if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
}
//marshal, err := json.Marshal(r)
//fmt.Println(string(marshal),err)
//fmt.Println(r)
// 打印响应状态,结果数和请求持续时间.
log.Printf(
"[%s] %d hits; took: %dms",
res.Status(),
int(r["hits"].(map[string]interface{})["total"].(map[string]interface{})["value"].(float64)),
int(r["took"].(float64)),
)
// 打印每次匹配的ID和文档来源.
for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) {
log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])
}
log.Println(strings.Repeat("=", 37))
}
修改
修改方式可以与新建一致,找到对应的DocumentID进行更改即可。