热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

「GoCN酷Go推荐」Golang的Ealstic链接库

背景介绍Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎,用于海量文档的搜索。有些项目会将Elasticsearch当做存储海量数据的数据库

背景介绍

Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎,用于海量文档的搜索。有些项目会将Elasticsearch当做存储海量数据的数据库使用,可见其查询性能之高效。作为面向文档的搜索引擎,Elasticsearch比起传统数据库更偏向于结构化数据的高效查询,其独特的倒排索引更能将查询性能提升至极致。在大数据微服务时代,Elasticsearch在海量数据搜索、数据挖掘、人工智能领域都起到了关键作用。

安   装

go get "github.com/olivere/elastic/v7"

Elasticsearch的数据来源通常来自于Logstash等数据采集中间件,作为golang项目来说,其查询功能的使用更加普遍。此文章以V7版本为例来介绍如何使用golang对Elasticsearch进行查询。

开源库的使用

连接客户端构建

import elasticv7 "github.com/olivere/elastic/v7"address := []string{"http://127.0.0.1:9200"}
cli, err := elasticv7.NewClient(elasticv7.SetURL(address...),elasticv7.SetBasicAuth("elastic", "123456"),elasticv7.SetSniff(false),
)

  • address 为集群的地址

  • SetBaseicAuth 接受UserName和Password作为参数完成校验

  • Sniff参数为true,创建的客户端会去嗅探整个集群,此动作会使用内网IP通信,导致无法连接到ES服务器,这里设置为false。

创建查询语句

精确查询

// 单值查询
elasticv7.NewTermQuery("key","value")// 多值查询
elasticv7.NewTermsQuery("key", []string{"value1","value2"}...)

精确查询要注意字符串类型的匹配,若为text字段,将匹配失败。可以尝试对"{字段}.keyword"来进行Term查询

通配符查询

elasticv7.NewWildcardQuery(key, word)

通配符查询通常用于模糊查询,例如"*xxxx*",等价于mysql中的like "%xxxx%"。

与查询

query := elasticv7.NewBoolQuery()
query.Must(queries ...)

与查询使用BoolQuery的Must函数来完成,其参数是类型为query的不定参数。当所有query均为真时此条件为真,可嵌套。

或查询

elasticv7.NewWildcardQuery("", "")
query.Should(queries ...)

与Must相似。

创建查询服务

search := cli.Search().Index(index_name).Query(query)

index_name是ES中的索引,类比Mysql相当于表Table的概念。query为查询对象,以上各种查询可相互嵌套形成最终的查询对象。

分页

search = search.From(10)
search = search.Size(10)

这里search中的函数都是链式的,可分行写亦可整行写。

排序

search = search.Sort(key,true)

排序的第一参数为排序字段,第二参数为是否正序。

跳过评分计算

constantQuery := elasticv7.NewConstantScoreQuery(query)

评分会降低查询的效率,当不需要时可以跳过。

总   结

官方库需要自己去构造查询的json结构,使用起来较为混乱,不易理解。相较而言,此开源库采用链式可嵌套的形式来构造查询对象,使用起来更加清晰便捷。其源码库中亦有相当多的各类函数和对象用于各种条件查询,此次只是摘取本人使用时设计过的些许功能加以介绍。

参考资料

1、https://segmentfault.com/a/1190000039140870

2、https://pkg.go.dev/github.com/elastic/go-elasticsearch/v6@v6.8.5/esapi

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名

扫码也可以加入 GoCN 的大家族哟~

210c5d6deb9ccfa9ddb58dc56ff2aa7a.png


推荐阅读
author-avatar
小菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有