IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> go操作ElasticSearch7.3.2 -> 正文阅读

[大数据]go操作ElasticSearch7.3.2

ElasticSearch的安装以及基本操作见这篇文章:ElasticSearch.Net 7.3.2 的学习

引用go的es包

go get github.com/olivere/elastic/v7

注意这里使用的是olivere/elastic的v7版本的包。
es提供的官方的go包不好用,由于本文章使用的ES7.3.2所以后面要加上v7,不然默认引用的v6的包!!!

初始化client

type BatDataInfo struct {
	BatId       int       `json:"batid"`
	BatCode     string    `json:"batcode"`
	StationName string    `josn:"stationname"`
	ClientName  string    `josn:"clientname"`
	Cycle       int       `josn:"cycle"`
	Step        int       `josn:"step"`
	ValueType   int       `josn:"valuetype"`
	Value       string    `josn:"value"`
	UploadTime  time.Time `josn:"uploadtime"`
}

func NewESClient() *elastic.Client {
	client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL("http://localhost:9200"))

	if err != nil {
		panic(err)
	}
	return client
}

Terms查询

这里引用了go-linq包,使得在go中操作可遍历对象像C#使用linq一样:

go get github.com/ahmetb/go-linq
func queryDetailDataByIds(batIds []int) {
	client := NewESClient()

	boolQuery := elastic.NewBoolQuery()

	objs := make([]interface{}, 0)
	linq.From(batIds).Select(func(i interface{}) interface{} { return i }).ToSlice(&objs)

	termsQuery := elastic.NewTermsQuery("batid", objs...)
	boolQuery.Must(termsQuery)

	result, err := client.Search().Index("batdatainfo").Pretty(true).Query(boolQuery).Do(context.Background())

	if err != nil {
		panic(err)
	}

	fmt.Printf("took time:%d ms\n", result.TookInMillis)
	models := make([]BatDataInfo, 0)

	var ttyp BatDataInfo
	for _, item := range result.Each(reflect.TypeOf(ttyp)) {
		t := item.(BatDataInfo)
		models = append(models, t)
	}

	if result.Hits.TotalHits.Value > 0 {
		fmt.Printf("Found count:%d\n", result.Hits.TotalHits.Value)
	} else {
		fmt.Print("Found no batdatainfos\n")
	}

	fmt.Println(models)
}

多条件的Terms查询

func queryDetailData(batIds []int, stationnames []string, valuetypes []int, startTime time.Time, endTime time.Time) ([]BatDataInfo, error) {
	queries := make([]elastic.Query, 0)
	if len(batIds) > 0 {
		objs := make([]interface{}, 0)
		linq.From(batIds).Select(func(i interface{}) interface{} { return i }).ToSlice(&objs)

		queries = append(queries, elastic.NewTermsQuery("batid", objs...))
	}

	if len(stationnames) > 0 {
		objs := make([]interface{}, 0)
		linq.From(batIds).Select(func(i interface{}) interface{} { return i }).ToSlice(&objs)

		queries = append(queries, elastic.NewTermsQuery("stationname", objs...))
	}

	if len(valuetypes) > 0 {
		objs := make([]interface{}, 0)
		linq.From(valuetypes).Select(func(i interface{}) interface{} { return i }).ToSlice(&objs)

		queries = append(queries, elastic.NewTermsQuery("valuetype", objs...))
	}

	if !startTime.IsZero() {
		queries = append(queries, elastic.NewRangeQuery("uploadtime").Gte(startTime))
	}

	if !endTime.IsZero() {
		queries = append(queries, elastic.NewRangeQuery("uploadtime").Lte(endTime))
	}

	boolQuery := elastic.NewBoolQuery()
	boolQuery.Must(queries...)

	client := NewESClient()
	searchResult, err := client.Search().Size(1000000).Index("batdatainfo").Query(boolQuery).Do(context.TODO())

	if err != nil {
		return nil, err
	}

	models := make([]BatDataInfo, 0)
	for _, item := range searchResult.Each(reflect.TypeOf(BatDataInfo{})) {
		t := item.(BatDataInfo)
		models = append(models, t)
	}
	return models, nil
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:40:57  更:2022-03-22 20:42:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:27:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码