美文网首页
golang-ElasticSearch学习

golang-ElasticSearch学习

作者: liziNo1 | 来源:发表于2021-08-12 17:42 被阅读0次

一、ElasticSearch连接

1、引入"github.com/olivere/elastic/v7"包

2、连接

client,err :=elastic.NewClient(elastic.SetSniff(false),elastic.SetURL(“服务器地址”),elastic.SetBasicAuth("账号", "密码"))

二、日志上传

1、单条记录上传

_, err :=conn.GetESClient().Index().

Index(index).// 设置索引名称,索引必须为小写字母数字下划线等组成,不得包含大小字母

  Id(guid).// 设置文档id,此处id最好为小写字母或数字组成,否则日志虽然插入或查询可行,但是刷新字段时无效

  BodyJson(json).// 指定内容

  Do(c)// 执行请求,需要传入一个上下文对象

2、批量上传

builService :=conn.GetESClient().Bulk().Index(index)

for _, v :=range logs {

m := v.(map[string]interface{})

if m["guid"] !=nil {

id := m["id"].(string)

doc :=elastic.NewBulkIndexRequest().Id(id).Doc(v)

builService.Add(doc)

}

res, err := builService.Do(c)

三、查询

1、查询(组合)

k:查询字段,v:对应的字符串

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

searchService :=conn.GetESClient().Search()

searchService = searchService.Index(Index).SearchType("query_then_fetch").Pretty(true)

2、分页查询

searchService.From(PageIndex * PageSize)

searchService.Size(PageSize)

3、匹配查询

querys := []elastic.Query{}

//q := elastic.NewMatchQuery(k,v)

//q := elastic.NewWildcardQuery(k,v)

//q := elastic.NewMatchPhraseQuery(k,v).Boost(0.7)

//q := elastic.NewMoreLikeThisQuery().LikeText(v).Field(k)

//q := elastic.NewTermQuery(k,v)

//有特殊字符的如,URL类型查询用此方法,不然查询不到,亲测有效

 q :=elastic.NewMatchPhrasePrefixQuery(k,v).MaxExpansions(10)

querys =append(querys,q)

//区间查询(多个)

//如果是字符串类型,字段后面需要加.keyword

k +=".keyword"

rQuery :=elastic.NewRangeQuery(k)

rQuery = rQuery.Gte(itemRange["gte"])

rQuery = rQuery.Lte(itemRange["lte"])

querys =append(querys,rQuery)

boolQuery = boolQuery.Must(querys...)

searchService = searchService.Query(boolQuery)

4、排序查询(多个)

sorters := []elastic.Sorter{}

//此处如果是字符串,后面需加.keyword

k +=".keyword"

sort :=elastic.NewFieldSort(k).Desc()

sorters =append(sorters,sort)

searchService = searchService.SortBy(sorters...)

searchResult, err := searchService.Do(c)

四、删除

1、删除索引

conn.GetESClient().DeleteIndex(indexs...).Do(c)

//删除并清空数据

delAll :=conn.GetESClient().DeleteByQuery()

delAll.Do(c)

2、删除某一条日志

deletService := conn.GetESClient().Delete().// 设置索引名

  Index(index)

deletService.Id(guid)

_,err := deletService.Do(c)

五、刷新某个字段值

//入刷新json数据中的status字段位1

script :=fmt.Sprintf("ctx._source['status']=%d",1)

es :=conn.GetESClient()

updateR, err := es.UpdateByQuery(queryIndex).

// 设置查询条件

  Query(elastic.NewTermQuery("id",id)).

//同步执行(不设置会异步执行,不能即时刷新,马上查询会没有变化)

Refresh("true").

// 通过脚本更新内容

  Script(elastic.NewScript(script)).

// 如果文档版本冲突继续执行

ProceedOnVersionConflict().Do(c)

相关文章

  • golang-ElasticSearch学习

    一、ElasticSearch连接 1、引入"github.com/olivere/elastic/v7"包 2、...

  • golang-ElasticSearch相关设置

    一、查询ES相关信息 curl localhost:9200/_nodes --user elastic:密码 二...

  • 学习学习学习

    第三天了,连续三天,早上睁眼开始,看视频,做课件,连续作业,直到晚上十二点才睡觉。吃饭不规律,想起来就吃,感觉不饿...

  • 学习学习学习

    23岁的我,才真正明白,什么是学习,什么是努力,努力和不努力真的不同,就好比同样是一篇稿子,我用一周背下来,有的人...

  • 学习学习学习!

    妈妈总是让我学习,我只能用装当办法。 方法一: 方法二: 方法三: 方法四: ...

  • 学习学习学习

    001.今天看财富自由之路看了第二遍,而且看了一半,算是完成任务很开心。中间有想放弃的念头,坚持看完。眼睛痛,一直...

  • 学习学习学习

    马自达为什么坚持高压缩比自吸

  • 学习!学习!学习!

    学习的痛苦是暂时的 没有学到的痛苦是永恒的 因为学习而特别充实的一天 很踏实 ~~~~ 2015.11.28.阴天...

  • 学习!学习!学习!

    无数次想要去逃离,可这封闭的世界根本出不去。你没有什么可以抛弃、只能咬着牙带着面具微笑的活下去。 没有那个人、他也...

  • 学习学习学习!

    昨天和今天两个上午,都在学习新媒体运营,学习的过程中心里只有一个想法:这也太套路,太功利了吧。可真应了那句话...

网友评论

      本文标题:golang-ElasticSearch学习

      本文链接:https://www.haomeiwen.com/subject/fwvlbltx.html