• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

goes

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

安装go package:

go get github.com/olivere/elastic

 

开撸:

/**
* es demo
* author:JetWu
* date:2020.06.10
 */
package es

import (
    "context"
    "errors"
    "fmt"
    "log"
    "reflect"

    "encoding/json"

    "github.com/olivere/elastic"
)

type Student struct {
    Name         string   `json:"name"`
    Age          int      `json:"age"`
    City         string   `json:"city"`
    Interests    []string `json:"interests"`
    Introduction string   `json:"introduction"`
}

var client *elastic.Client
var host = "http://127.0.0.1:9200/"

/**
* 连接es
 */
func init() {
    log.Println("Connecting to elasticsearch server...")
    //连接es
    var err error
    client, err = elastic.NewSimpleClient(elastic.SetURL(host))
    if err != nil {
        log.Println("Connected failed: ", err)
        return
    }
    log.Println("Connected succeed!")
    //测试es连接
    info, _, err := client.Ping(host).Do(context.Background())
    if err != nil {
        log.Println("Ping elasticsearch server failed: ", err)
        return
    }
    log.Println("elasticsearch version: ", info.Version.Number)
}

/**
* 打印查询语句
 */
func PrintQuery(src interface{}) {
    data, err := json.MarshalIndent(src, "", "")
    if err != nil {
        log.Println("PrintQuery Error: ", err)
        return
    }
    fmt.Println("PrintQuery:\n", string(data))
}

/**
* 搜索
 */
func Search(keyword string) []*Student {
    queryStr := `{
        "bool": {
            "should": [
                {
                    "match": {"name":"%s"}
                },
                {
                    "match": {"city":"%s"}
                },
                {
                    "match": {"interests":"%s"}
                },
                {
                    "match": {"introduction":"%s"}
                }
            ]
        }
    }`
    rawQuery := elastic.NewRawStringQuery(fmt.Sprintf(queryStr, keyword, keyword, keyword, keyword))
    PrintQuery(rawQuery)

    searchResult, err := client.Search("school").Type("student").
        Query(rawQuery).From(0).Size(10).Do(context.Background())
    if err != nil {
        log.Println("Search Error: ", err)
        return nil
    }
    fmt.Printf("Query took %d milliseconds, total: %d\n", searchResult.TookInMillis, searchResult.Hits.TotalHits)

    var students []*Student
    var stuType Student
    for _, item := range searchResult.Each(reflect.TypeOf(stuType)) {
        if stu, ok := item.(Student); ok {
            students = append(students, &stu)
        }
    }
    return students
}

/**
* 添加/修改
 */
func Add(indexId string, stu *Student) error {
    if stu == nil {
        return errors.New("Add Error: data empty!")
    }
    ret, err := client.Index().Index("school").Type("student").
        Id(indexId).BodyJson(stu).Do(context.Background())
    if err != nil {
        log.Println("Add Error: ", err)
        return err
    }
    fmt.Printf("Indexed %s to index %s, type %s\n", ret.Id, ret.Index, ret.Type)
    return nil
}

/**
* 删除
 */
func Remove(indexId string) error {
    ret, err := client.Delete().Index("school").Type("student").
        Id(indexId).Do(context.Background())
    if err != nil {
        log.Println("Remove Error: ", err)
        return err
    }
    fmt.Printf("delete result: %d, %s\n", ret.Status, ret.Result)
    return nil
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
可视化Go内存管理发布时间:2022-07-10
下一篇:
Go编程语言规范2-类型发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap