golang-ElasticSearch学习

2021-08-12  本文已影响0人  liziNo1

一、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)

上一篇 下一篇

猜你喜欢

热点阅读