「GoCN酷Go推荐」Golang的Ealstic链接库
背景介绍
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 的大家族哟~
「GoCN酷Go推荐」Golang的Ealstic链接库相关推荐
- 「GoCN酷Go推荐」Golang轻量级桌面程序wails2教学
01 推荐理由 不依赖cgo!不依赖cgo!不依赖cgo!真的不依赖cgo,且跨平台,原生渲染 无嵌入式浏览器,轻量级,生成的文件很小,而且只有一个可执行文件就可运行. 02 功能介绍 后端使用标准 ...
- 「GoCN酷Go推荐」golang 跨平台部署利器
1 研究背景 go程序部署时,直接将编译好的文件在服务器上运行即可,一般无需安装所依赖的第三方库. Linux下部署分为以下几种方式: 使用nohup 命令 使用 Supervisord管理 使用sy ...
- 「GoCN酷Go推荐」漏桶限流库 — uber-go/ratelimit
上次有同学分享了 单机限流器 time/rate 库,讲了 Golang 标准库中基于令牌桶实现限流组件的 time/rate 使用,同时也讲了一些限流算法原理. 这里分享一个 uber 开源的一套基 ...
- 「GoCN酷Go推荐」交互式命令行工具库survey
☆ 什么是 survey? ☆ survey 可以让你方便的在终端上构建交互式和可访问提示的应用,支持ANSI ☆ 安装 ☆ go get github.com/AlecAivazis/survey/ ...
- 「GoCN酷Go推荐」后现代时代远程办公网络问题的golang开源解决方案 —— PairMesh...
PairMesh是什么? Pairmesh是一款先进的虚拟局域网(VPN)工具,用来搭建与访问安全,易用,高性能的点对点的软件定义虚拟局域网,为远程办公的网络连接问题提供了开箱即用的解决方案. 拥抱开 ...
- 「GoCN酷Go推荐」QQ机器人 go-cqhttp
什么是 go-cqhttp?✦ QQ机器人,可以做的事儿太多了,比如一个UP主需要群发多个QQ群,以便通知粉丝们开播:再比如可以检测群内或发给自己的消息,而通过代码直接回复做的简单回复.比如检测群内有 ...
- 「GoCN酷Go推荐」高性能内存缓存 ristretto
背景 ristretto 是 dgraph 团队开源的一款高性能内存缓存库,旨在解决高并发场景下的缓存性能和吞吐瓶颈.dgraph 专攻的方向是高性能图数据库,ristretto 就是其图数据库和 K ...
- 「GoCN酷Go推荐」快速搭建私有云服务 go-btfs
# 1. go-btfs 是什么?# go-btfs 是一个去中心化的文件存储平台,无论图片.文件.视频等等各类文件.每个人都可以在自己电脑上安装部署 BTFS 节点,然后大家的节点相互连接,构成一个 ...
- 「GoCN酷Go推荐」JSON 数据获取器 JID
01 推荐理由 JSON 格式数据适用范围非常广泛,一个内容丰富的json数据可能很大,使用 JID 可以让你非常舒服的获取到想要到数据. 02 简介 JID 是一个过滤JSON格式数据 cli ...
最新文章
- 使用Pixel Bender Toolkit制作特效——多像素采样(Part 4)
- GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法
- 腾讯开源框架Angel推出3.0版本:全栈机器学习平台
- 将一个数组输出到模板中来处理2
- 前端学习(1036):bootstrap-js插件2
- PyTorch学习(8)-问答系统、文本摘要和大规模预训练语言模型
- python安装方法_【Python教程】Windows10 安装Python
- 【安卓笔记】—— 页面导航 Navigation(3)
- 2013-开始新的一年
- js实现php中图片轮播,两种js实现轮播图的方式
- Unofficial Windows Binaries for Python Extensi...
- c++ primer plus 对象和类
- vim如何删除^M字符
- 安卓投屏软件_安卓投屏下载-安卓投屏下载v7.7.3
- CTF-reverse菜鸡想要走出菜狗设计的迷宫
- 我要曝光!CDN 省钱大法!
- 湿空气性质计算,随笔与学习记录(1.饱和水蒸气压力计算)
- 深度学习基础:评价标准——TP、FN、FP、TN、AP、MAP
- 计算机无法启动怎么重装系统,电脑开不开机怎么重装系统教程
- id门禁卡复制到手机_门禁卡复制到苹果手机