zoukankan      html  css  js  c++  java
  • go es

    安装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:
    ", 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
    ", 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
    ", 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
    ", ret.Status, ret.Result)
        return nil
    }
    

      

  • 相关阅读:
    基于梯度下降的神经网络
    灵活定义神经网络结构
    四种方法下载网络文本数据到本地内存
    Timus Online Judge 1057. Amount of Degrees(数位dp)
    280行代码:Javascript 写的2048游戏
    记一次R的可视化使用-生成城市各个景点的多边形图
    OpenGL基础图形编程(八)变换
    Java Web项目中连接Access数据库的配置方法
    Spring学习笔记——Spring依赖注入原理分析
    hadoop native本地库问题总结
  • 原文地址:https://www.cnblogs.com/wujuntian/p/13087071.html
Copyright © 2011-2022 走看看