ElasticSearch—go语言连接es

由于实验室项目用到go语言连接es,因此学习了一下。本篇讲述的是如何在es中建立index及其type。

//首先调用gopkg.in/olivere/elastic.v5包,这个包真的帮大忙了!这里使用的版本是第五版。

package main

import (

    "context"

    "fmt"

    "log"    

    "os"

    "time"

    "gopkg.in/olivere/elastic.v5"

)


//声明客户端类型以及本地服务器IP及端口,这里一般自动绑定9200端口。

var client *elastic.Client

var host = "http://10.10.88.203:9200/"


//建立几个你想要的type,并转换为json格式。这里建立了三种type,内容包含int、string、uint64等型。

type IPinfo struct {

    Port801  int `json:"port801"`

    Port802  int `json:"port802"`

    Port803  int `json:"port803"`

    Port804  int `json:"port804"`

}

type Bidinfo struct {

    Port80 int    `json:"port80"`

    Back1  string `json:"back1"`

    Back2  string `json:"back2"`

    Back3  string `json:"back3"`

}

type Loginfo struct {

    TimeStamp  uint64 `json:"time_stamp"`

    TimeDelay  int    `json:"time_delay"`

    MessageType int    `json:"message_type"`

    Error      string `json:"error"`

    Dir        string `json:"dir"`

}


//将你想要建立的type类型进行数据输入,这里是测试数据所以随便设了一些值,最后返回IPinfo, Bidinfo, Loginfo三种struct,名字分别为e1、e2、e3。

func build_constructure() (IPinfo, Bidinfo, Loginfo) {

    IPinfoVNumber := 100

    BidinfoVNumber := 100

    LoginfoVNumber := 100

    stringinfoVNumber := "gyfiutfuhiygfutyrdutdkuthgjyrdytfjyrsytfjy"

    var TimeStamp uint64 = 100000000


    e1 := IPinfo{IPinfoVNumber,

        IPinfoVNumber,

        IPinfoVNumber,

        IPinfoVNumber,

        IPinfoVNumber}

    e2 := Bidinfo{BidinfoVNumber,

        BidinfoVNumber,

        stringinfoVNumber,

        stringinfoVNumber,

        stringinfoVNumber}

    e3 := Loginfo{TimeStamp,

        LoginfoVNumber,

        LoginfoVNumber,

        stringinfoVNumber,

        stringinfoVNumber}

    return e1, e2, e3

}


//关键的函数,建立channel。

func create(end chan int) {

//设立节点数

    workers := 10

    bulk := 10000

//建立三个type

    ipinfo, bidinfo, loginfo := build_constructure()

//建立一个新的客户端

    client, err := elastic.NewClient()

    if err != nil {

        panic(err)

    }

// 建立一个bulk processor(可以类比于一个数据库)

processor, err := client.BulkProcessor().Workers(workers).Stats(true).BulkActions(bulk).BulkSize(200 << 20).Do(context.Background())

if err != nil {

    panic(err)

}

// 建立一个bulk index request

// 注意: 一定要建立index及type

req_ip := elastic.NewBulkIndexRequest().Index("bulk_processor").Type("ip").Doc(ipinfo)

req_bid := elastic.NewBulkIndexRequest().Index("bulk_processor").Type("bid").Doc(bidinfo)

req_log := elastic.NewBulkIndexRequest().Index("bulk_processor").Type("log").Doc(loginfo)


//将建立好的index放入processor

for {

    processor.Add(req_ip)

    processor.Add(req_bid)

    processor.Add(req_log)

}

// Stop the bulk processor and do some cleanup

defer processor.Close()

end <- 0


//主函数,执行以上函数并计算建表时间

func main() {

//这里集群中有两个线程

    threadnumber := 2

    end := make(chan int)

    start_time := time.Now()

    fmt.Printf("Now Starting, at %s\n", start_time)

    for i := 0; i < threadnumber; i++ {

        go create(end)

    }

    for i := 0; i < threadnumber; i++ {

//读end管道

        <-end

    }

    finish_time := time.Now()

    fmt.Printf("Time consuming: %s\n", finish_time.Sub(start_time))

}



完成啦!

你可能感兴趣的:(ElasticSearch—go语言连接es)