91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

elasticsearch怎么使用

發布時間:2021-12-04 13:41:43 來源:億速云 閱讀:229 作者:iii 欄目:大數據

這篇文章主要講解了“elasticsearch怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“elasticsearch怎么使用”吧!

es.go

package main

import (
	"context"
	"github.com/olivere/elastic"
	"time"
)

var (
	esUrl  = "http://s10:19200"
	ctx    = context.Background()
	client *elastic.Client
)

func init() {
	var err error

	client, err = elastic.NewClient(
		elastic.SetSniff(false),
		elastic.SetURL(esUrl),
		elastic.SetHealthcheckInterval(10*time.Second),
		elastic.SetMaxRetries(5),
	)

	if err != nil {
		panic(err.Error())
	}
}

mysql.go

package main

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
)

var (
	db *xorm.EngineGroup
)

func init() {
	conns := []string{"test:test@tcp(127.0.0.1:3306)/test"}

	var err error
	db, err = xorm.NewEngineGroup("mysql", conns)
	if err != nil {
		panic(err.Error())
	}

	db.ShowSQL(true)
	db.SetMaxIdleConns(5)
	db.SetMaxOpenConns(10)
}

model.go

package main

import (
	"encoding/json"
	"time"
)

type StudentAnswer struct {
	Id            int64     `json:"id"`
	Qid           int64     `json:"qid"`
	QuesType      int       `json:"ques_type"`
	ClassType     int       `json:"class_type"`
	LessonId      int64     `json:"lesson_id"`
	ScheduleId    int64     `json:"schedule_id"`
	IsFirstSubmit int       `json:"is_first_submit"`
	IsRight       int       `json:"is_right"`
	StuAnswer     string    `json:"stu_answer"`
	Scores        string    `json:"scores"`
	StudentId     int64     `json:"student_id"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
}

func (*StudentAnswer) TableName() string {
	return "student_answer"
}

func (sa *StudentAnswer) String() string {
	buf, _ := json.Marshal(sa)
	return string(buf)
}

main.go

package main

import (
	"fmt"
	"github.com/olivere/elastic"
	"googo.io/goo/log"
	"sync"
)

var (
	MaxId    = int64(0)
	pageSize = 1000
	index    = "stu-answer"
	wg       sync.WaitGroup
	ch       = make(chan int64, 1000)
	data     = make(chan []StudentAnswer)
)

func init() {
	// client.DeleteIndex(index).Do(ctx)
	// client.CreateIndex(index).Do(ctx)
}

func main() {
	wg.Add(1)
	go func() {
		defer wg.Done()
		for {
			rows := getRows()
			fmt.Println(len(rows))
			if rows == nil || len(rows) == 0 {
				break
			}
			MaxId = rows[len(rows)-1].Id
			data <- rows
		}
	}()

	wg.Add(1)
	go func() {
		defer wg.Done()
		for {
			select {
			case rows := <-data:
				el := client.Bulk().Index(index)
				for _, row := range rows {
					el.Add(elastic.NewBulkIndexRequest().Id(fmt.Sprintf("%d", row.Id)).Doc(row))
				}
				if _, err := el.Do(ctx); err != nil {
					gooLog.Error(err.Error())
				}
			}
		}
	}()

	wg.Wait()
}

func getRows() []StudentAnswer {
	rows := []StudentAnswer{}
	err := db.Where("id > ?", MaxId).Limit(pageSize).Find(&rows)
	if err != nil {
		gooLog.Error(err.Error())
		return nil
	}
	return rows
}

test/main.go

package main

import (
	"encoding/json"
	"fmt"
	"github.com/olivere/elastic"
)

// SELECT COUNT(*) AS cnt FROM (SELECT id FROM `student_answer`
// WHERE lesson_id IN (633,63,635,636,665,668) AND is_first_submit = 1 AND class_type = 2
// GROUP BY `student_id`) AS a

var (
	index = "jy_edu_student_answer"
)

func main() {
	q := elastic.NewBoolQuery().Must(
		elastic.NewTermsQuery("lesson_id", 633, 634, 635, 636, 665, 668),
		elastic.NewMatchQuery("is_first_submit", "1"),
		elastic.NewMatchQuery("class_type", "2"),
	)

	agg := elastic.NewTermsAggregation().Field("student_id")

	cnt, err := client.Count().Index(index).Do(ctx)
	fmt.Println(cnt, err)

	cnt, err = client.Count().Index(index).Query(q).Do(ctx)
	fmt.Println(cnt, err)

	rst, _ := client.Search().Index(index).Aggregation("agg_student_id", agg).Query(q).Size(0).Do(ctx)
	buf, _ := json.Marshal(rst)
	fmt.Println(string(buf))
}

感謝各位的閱讀,以上就是“elasticsearch怎么使用”的內容了,經過本文的學習后,相信大家對elasticsearch怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

布尔津县| 梁河县| 广昌县| 三亚市| 汝州市| 小金县| 博野县| 尤溪县| 项城市| 洞口县| 海宁市| 伊春市| 故城县| 华阴市| 榆中县| 彭州市| 邓州市| 石嘴山市| 惠水县| 绥芬河市| 抚宁县| 恩施市| 元阳县| 池州市| 永顺县| 宣威市| 林芝县| 错那县| 兰州市| 东海县| 江阴市| 苍南县| 彰武县| 德兴市| 嘉定区| 莱州市| 海安县| 敖汉旗| 阳泉市| 马尔康县| 长葛市|