背景介绍

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链接库相关推荐

  1. 「GoCN酷Go推荐」Golang轻量级桌面程序wails2教学

    01 推荐理由 不依赖cgo!不依赖cgo!不依赖cgo!真的不依赖cgo,且跨平台,原生渲染 无嵌入式浏览器,轻量级,生成的文件很小,而且只有一个可执行文件就可运行. 02 功能介绍 后端使用标准 ...

  2. 「GoCN酷Go推荐」golang 跨平台部署利器

    1 研究背景 go程序部署时,直接将编译好的文件在服务器上运行即可,一般无需安装所依赖的第三方库. Linux下部署分为以下几种方式: 使用nohup 命令 使用 Supervisord管理 使用sy ...

  3. 「GoCN酷Go推荐」漏桶限流库 — uber-go/ratelimit

    上次有同学分享了 单机限流器 time/rate 库,讲了 Golang 标准库中基于令牌桶实现限流组件的 time/rate 使用,同时也讲了一些限流算法原理. 这里分享一个 uber 开源的一套基 ...

  4. 「GoCN酷Go推荐」交互式命令行工具库survey

    ☆ 什么是 survey? ☆ survey 可以让你方便的在终端上构建交互式和可访问提示的应用,支持ANSI ☆ 安装 ☆ go get github.com/AlecAivazis/survey/ ...

  5. 「GoCN酷Go推荐」后现代时代远程办公网络问题的golang开源解决方案 —— PairMesh...

    PairMesh是什么? Pairmesh是一款先进的虚拟局域网(VPN)工具,用来搭建与访问安全,易用,高性能的点对点的软件定义虚拟局域网,为远程办公的网络连接问题提供了开箱即用的解决方案. 拥抱开 ...

  6. 「GoCN酷Go推荐」​QQ机器人 go-cqhttp

    什么是 go-cqhttp?✦ QQ机器人,可以做的事儿太多了,比如一个UP主需要群发多个QQ群,以便通知粉丝们开播:再比如可以检测群内或发给自己的消息,而通过代码直接回复做的简单回复.比如检测群内有 ...

  7. 「GoCN酷Go推荐」高性能内存缓存 ristretto

    背景 ristretto 是 dgraph 团队开源的一款高性能内存缓存库,旨在解决高并发场景下的缓存性能和吞吐瓶颈.dgraph 专攻的方向是高性能图数据库,ristretto 就是其图数据库和 K ...

  8. 「GoCN酷Go推荐」快速搭建私有云服务 go-btfs

    # 1. go-btfs 是什么?# go-btfs 是一个去中心化的文件存储平台,无论图片.文件.视频等等各类文件.每个人都可以在自己电脑上安装部署 BTFS 节点,然后大家的节点相互连接,构成一个 ...

  9. 「GoCN酷Go推荐」JSON 数据获取器 JID

    01 推荐理由   JSON 格式数据适用范围非常广泛,一个内容丰富的json数据可能很大,使用 JID 可以让你非常舒服的获取到想要到数据. 02 简介 JID 是一个过滤JSON格式数据 cli ...

最新文章

  1. 使用Pixel Bender Toolkit制作特效——多像素采样(Part 4)
  2. GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法
  3. 腾讯开源框架Angel推出3.0版本:全栈机器学习平台
  4. 将一个数组输出到模板中来处理2
  5. 前端学习(1036):bootstrap-js插件2
  6. PyTorch学习(8)-问答系统、文本摘要和大规模预训练语言模型
  7. python安装方法_【Python教程】Windows10 安装Python
  8. 【安卓笔记】—— 页面导航 Navigation(3)
  9. 2013-开始新的一年
  10. js实现php中图片轮播,两种js实现轮播图的方式
  11. Unofficial Windows Binaries for Python Extensi...
  12. c++ primer plus 对象和类
  13. vim如何删除^M字符
  14. 安卓投屏软件_安卓投屏下载-安卓投屏下载v7.7.3
  15. CTF-reverse菜鸡想要走出菜狗设计的迷宫
  16. 我要曝光!CDN 省钱大法!
  17. 湿空气性质计算,随笔与学习记录(1.饱和水蒸气压力计算)
  18. 深度学习基础:评价标准——TP、FN、FP、TN、AP、MAP
  19. 计算机无法启动怎么重装系统,电脑开不开机怎么重装系统教程
  20. id门禁卡复制到手机_门禁卡复制到苹果手机

热门文章

  1. 超全!2020互联网大厂的薪资和职级一览
  2. Redux入门0x101: 简介及`redux`简单实现
  3. [hackinglab] 逗比验证码第二期
  4. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)B Mine Sweeper II
  5. 白模处理成b3dm格式数据
  6. html5到底部自动加载,列表滚动到底部自动加载更多
  7. Androidstudio自定义标题栏
  8. 分析网页 JavaScript Bundles 的几种方法
  9. PFC2D学习笔记——接触模型
  10. 第一章:网络应用编程入门知识