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

「GoCN酷Go推荐」Golang的Ealstic链接库,第1张

背景介绍

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/[email protected]/esapi

《酷Go推荐》招募:

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

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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存