创建mapping:
请求地址: youku/_doc/_mapping?pretty&include_type_name=true
json参数: 分词器:ik分词器 , 搜索分词器:ik分词器
{"properties":{"id":{"type":"integer"},"title":{"type":"text","analyzer":"ik_max_word","search_analyzer":"ik_max_word"}}}
Beego封装Es
package es
import (
"encoding/json"
"fmt"
"github.com/astaxie/beego/httplib"
)
var esUrl string
func init() {
esUrl = "http://39.105.156.191:9200/"
}
type ReqSearchData struct {
Hits HitsData `json:"hits"`
}
type HitsData struct {
Total TotalData `json:"total"`
Hits []HitsTwoData `json:"hits"`
}
type HitsTwoData struct {
Source json.RawMessage `json:"_source"`
}
type TotalData struct {
Value int
Relation string
}
func EsSearch(indexName string, query map[string]interface{}, from int, size int, sort []map[string]string) HitsData {
searchQuery := map[string]interface{}{
"query": query,
"from": from,
"size": size,
"sort": sort,
}
req := httplib.Post(esUrl + indexName + "/_search")
req.JSonBody(searchQuery)
str, err := req.String()
if err != nil {
fmt.Println("elasticsearch is error ", err)
}
fmt.Println(str)
var stb ReqSearchData
err = json.Unmarshal([]byte(str), &stb)
return stb.Hits
}
func EsAdd(indexName string, id string, body map[string]interface{}) bool {
req := httplib.Post(esUrl + indexName + "/_doc/" + id)
req.JSonBody(body)
_, err := req.String()
if err != nil {
fmt.Println("elasticsearch is error ", err)
return false
}
return true
}
func EsUpdate(indexName string, id string, body map[string]interface{}) bool {
bodydata:= map[string]interface{}{
"doc": body,
}
req := httplib.Post(esUrl + indexName + "/_doc/" + id + "/_update")
req.JSonBody(bodyData)
_, err := req.String()
if err != nil {
fmt.Println("elasticsearch is error ", err)
return false
}
return true
}
func EsDelete(indexName string, id string) bool {
req := httplib.Delete(esUrl + indexName + "/_doc/" + id)
_, err := req.String()
if err != nil {
fmt.Println("elasticsearch is error ", err)
return false
}
return true
}
Beego使用Es增删改查demo
package controllers
import (
"encoding/json"
"fmt"
"github.com/astaxie/beego"
"youku/services/es"
)
type EsDemoController struct {
beego.Controller
}
type ResData struct {
Id int `json:"id"`
Title string `json:"title"`
}
// 搜索es
// @router /es/search [*]
func (this *EsDemoController) Search() {
sort := []map[string]string{map[string]string{"id": "desc"}}
query := map[string]interface{}{
"bool": map[string]interface{}{
"must": map[string]interface{}{
"term": map[string]interface{}{
"id": 1,
},
},
},
}
res := es.EsSearch("youku", query, 0, 10, sort)
total := res.Total
var resData []ResData
for _, v := range res.Hits {
var data ResData
err := json.Unmarshal(v.Source, &data)
if err != nil {
fmt.Println("查询json错误", err)
}
resData = append(resData, data)
}
fmt.Println(total)
fmt.Println(resData)
this.Ctx.WriteString("search")
}
// 添加数据到es
// @router /es/add [*]
func (this *EsDemoController) Add() {
body := map[string]interface{}{
"id": 1,
"title": "张三",
}
s := es.EsAdd("youku", "user-1", body)
fmt.Println(s)
this.Ctx.WriteString("添加到ES")
}
// 修改数据到es
// @router /es/edit [*]
func (this *EsDemoController) Edit() {
body := map[string]interface{}{
"id": 2,
"title": "李四",
}
s := es.EsUpdate("youku", "user-1", body)
fmt.Println(s)
this.Ctx.WriteString("修改到ES")
}
// 删除数据到es
// @router /es/delete [*]
func (this *EsDemoController) Delete() {
s := es.EsDelete("youku", "user-1")
fmt.Println(s)
this.Ctx.WriteString("修改到ES")
}
项目中实现



