美文网首页
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学习

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