Go语言操作ElasticSearch(基本操作)_go elasticsearch_谬也的博客-CSDN博客


本站和网页 https://blog.csdn.net/my_miuye/article/details/110496025 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Go语言操作ElasticSearch(基本操作)_go elasticsearch_谬也的博客-CSDN博客
Go语言操作ElasticSearch(基本操作)
谬也
已于 2023-02-26 15:53:18 修改
4144
收藏
14
分类专栏:
go
文章标签:
go
elasticsearch
于 2020-12-02 19:51:12 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/my_miuye/article/details/110496025
版权
go
专栏收录该内容
22 篇文章
0 订阅
订阅专栏
标题Go操作ElasticSearch常用接口
刚学了es,记录一下常用的接口,包括基础增删改查
index 类似sql中的 库 type 类似sql中的 表 id 类似sql中的主 键
代码如下:
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/olivere/elastic"
log "github.com/sirupsen/logrus"
"reflect"
"strings"
var ESClient *elastic.Client
var ESServerURL = []string{"http://127.0.0.1:9200"}
type Language struct {
Name string `json:"name"`
BuildTime int `json:"build_time"`
func main() {
var esIndex = "programming"
var esType = "language"
//初始化es连接
ESClient, err := elastic.NewClient(
elastic.SetSniff(false),
elastic.SetURL(ESServerURL...))
if err != nil {
log.Errorf("Failed to build elasticsearch connection: %s %s", strings.Join(ESServerURL, ","), err.Error())
info, code, err := ESClient.Ping(strings.Join(ESServerURL, ",")).Do(context.Background())
if err != nil {
log.Error("ping es failed", err.Error())
fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number)
//构造数据
c := &Language{
Name: "c",
BuildTime: 1972,
php := &Language{
Name: "php",
BuildTime: 1995,
java := Language{
Name: "java",
BuildTime: 1995,
python := Language{
Name: "python",
BuildTime: 1991,
//检查索引是否存在
exists, err := ESClient.IndexExists(esIndex).Do(context.Background())
if err != nil {
log.Error("check index exist failed", err.Error())
//索引不存在则创建索引
//索引不存在时查询会报错,但索引不存在的时候可以直接插入
if !exists {
log.Infof("index %s is not exist", esIndex)
_, err := ESClient.CreateIndex(esIndex).Do(context.Background())
if err != nil {
log.Error("create index failed", err.Error())
//插入一条数据,id指定为对应的name,若不指定则随机生成
_, err = ESClient.Index().Index(esIndex).Type(esType).Id(c.Name).BodyJson(c).Do(context.Background())
if err != nil {
log.Error("insert es failed", err.Error())
//借助bulk批量插入数据
bulkRequest := ESClient.Bulk().Index(esIndex).Type(esType)
req := elastic.NewBulkIndexRequest().Doc(java)
req.Id(java.Name) //指定id
bulkRequest.Add(req)
req = elastic.NewBulkIndexRequest().Doc(php)
req.Id(php.Name)
bulkRequest.Add(req)
req = elastic.NewBulkIndexRequest().Doc(python)
req.Id(python.Name)
bulkRequest.Add(req)
_, err = bulkRequest.Do(context.TODO())
if err != nil {
log.Error(err.Error())
//更新数据,DetectNoop(false)时无论更新内容与原本内容是否一致,都进行更新
c.BuildTime = 2020
_,err = ESClient.Update().Index(esIndex).Type(esType).Id("c").Doc(c).DetectNoop(false).Do(context.Background())
if err != nil {
log.Error(err.Error())
//根据id进行查询
var resultType Language
searchById,err := ESClient.Get().Index(esIndex).Type(esType).Id("java").Do(context.Background())
if searchById.Found{
if err := json.Unmarshal(searchById.Source,&resultType); err != nil{
log.Error(err.Error())
fmt.Printf("search by id: %#v \n",resultType)
//查询index中所有的数据
searchAll,err := ESClient.Search(esIndex).Type(esType).Do(context.Background())
for _,item := range searchAll.Each(reflect.TypeOf(resultType)) {
language := item.(Language)
fmt.Printf("search by index all: %#v \n",language)
//查询前size条数据
//利用size和from可以实现查询结果的分页
searchPart,err := ESClient.Search(esIndex).Type(esType).Size(2).Do(context.Background())
for _,item := range searchPart.Each(reflect.TypeOf(resultType)) {
language := item.(Language)
fmt.Printf("search by index part: %#v \n",language)
//boolquery 可用于组合查询
//Must想当于且,Should相当于或,MustNot相当于非......
boolquery := elastic.NewBoolQuery()
boolquery.Must(elastic.NewMatchQuery("name","java")) //查询name为java的
searchByMatch,err := ESClient.Search(esIndex).Type(esType).Query(boolquery).Do(context.Background())
for _,item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
language := item.(Language)
fmt.Printf("search by match: %#v \n",language)
//匹配查询
matchPhraseQuery := elastic.NewMatchPhraseQuery("name","py") //查询name包含py的
searchByPhrase,err := ESClient.Search(esIndex).Type(esType).Query(matchPhraseQuery).Do(context.Background())
for _,item := range searchByPhrase.Each(reflect.TypeOf(resultType)) {
language := item.(Language)
fmt.Printf("search by phrase: %#v \n",language)
//条件查询
boolquery2 := elastic.NewBoolQuery()
boolquery2.Filter(elastic.NewRangeQuery("build_time").Gt(2000)) //查询build_time大于2000
searchByfilter,err := ESClient.Search(esIndex).Type(esType).Query(boolquery2).Do(context.Background())
for _,item := range searchByfilter.Each(reflect.TypeOf(resultType)) {
language := item.(Language)
fmt.Printf("search by filter: %#v \n",language)
//删除指定id对应的数据
_,err = ESClient.Delete().Index(esIndex).Type(esType).Id("c").Do(context.Background())
if err != nil {
log.Error(err.Error())
//删除指定index中的所有数据
_, err = ESClient.DeleteIndex(esIndex).Do(context.Background())
if err != nil {
log.Error(err.Error())
参考链接: https://blog.miuyun.work
谬也
关注
关注
点赞
14
收藏
打赏
知道了
评论
Go语言操作ElasticSearch(基本操作)
标题Go操作ElasticSearch常用接口刚学了es,记录一下常用的接口,包括基础增删改查index 类似sql中的 库type 类似sql中的 表id 类似sql中的主 键代码如下:package mainimport ("context""encoding/json""fmt""github.com/olivere/elastic"log "github.com/sirupsen/logrus""reflect""strings")var ESCli
复制链接
扫一扫
专栏目录
Elasticsearch从入门到企业开发视频教程
02-08
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Go-elastigo-一个基于Go(golang)的Elasticsearch客户端库
08-13
elastigo - 一个基于Go (golang) 的Elasticsearch客户端库
参与评论
您还未登录,请先
登录
后发表或查看评论
Go Elasticsearch 增删改查(CRUD)快速入门
m0_67400973的博客
04-18
2575
文章目录
1.入门简介
2.客户端库
3.创建客户端
4.index 增删改查
5.增加
6.删除
7.修改
8.查询
9.小结
参考文献
1.入门简介
Elasticsearch 入门简介
2.客户端库
ES 的 Go 客户端较为流行的有 Elastic 公司官方库go-elasticsearch 和第三方库 olivere/elastic,后者较为流行。
因项目中使用的是 olivere/elastic/v7,所以本文将介绍通过该库完成对 ES 的增删改查。
注意,ES 不同版本需要使用对应版本的.
Go操作elasticsearch合集
最新发布
m0_46937429的博客
02-03
142
【代码】Go操作elasticsearch 基础操作。
go对接elasticsearch
leo_jk的博客
04-03
2845
一、elasticserch请求规范 RESTful
1.请求连接url:http://192.168.10.11:9200/<index>/<type>/[<id>]
ip是es服务ip,端口根据服务器默认或其他,
index相当于 mysql的数据库
type相当于mysql的表
id相当于行主键id,id是可选的,es会自动生成
2.请求RestFull风格:http请求(head头:Content-Type:application/json),发送
GO 操作Elasticsearch(ES)完整代码
风沙无痕的博客
05-06
1346
//三个属性,任一个命中即可,加上查询名称是为了高亮显示关键词
boolQ := elastic.NewBoolQuery()
nameQuery := elastic.NewMatchQuery("alias", Key).Boost(1024).QueryName("f_first")
descriptionQuery := elastic.NewMatchQuery("description", Key).Boost(1.5).Quer...
Go es的增删改查
weixin_40123451的博客
01-26
958
摘要:​​​​​​go操作es7的常用增删改查操作_猿职场的博客-CSDN博客
Go Elasticsearch 更新快速入门
Dablelv 的博客专栏。
11-18
2463
1.根据 ID 修改
可以根据文档 ID 更新对应的文档。
// Update 修改文档
// param: index 索引; id 文档ID; m 待更新的字段键值结构
func Update(ctx context.Context, index, id string, doc interface{}) error {
_, err := GetESClient().Update().Index(index).Id(id).Doc(doc).Refresh("true").Do(ctx)
retur
Go 操作 ElasticSearch 实战
a...Z
07-26
977
在这里记录一下Golang操作elastic的使用方式,本文使用的是第三方包github.com/olivere/elastic的v7版本。
1.精确匹配单个字段
使用term查询,
package mainimport ( "context" "fmt" "github.com/olivere/elastic/v7" &nbsp
go操作elasticsearch示例
无风的雨
10-28
1584
这里我使用elasticsearch官方给的go语言包(go-elasticsearch)
go-elasticsearch向前兼容,这意味着客户端支持与更大或同等次要版本的 Elasticsearch 通信。Elasticsearch 语言客户端仅向后兼容默认发行版,不提供任何保证。
包:https://github.com/elastic/go-elasticsearch
Elasticsearch: 权威指南:https://www.elastic.co/guide/cn/elasticsea
Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索
Elastic 中国社区官方博客
10-21
5700
在今天的文章中,我将介绍如何使用 Go 语言来对 Elasticsearch 进行搜索。首先,我假设你已经对 Elastic Stack 有一定的了解。Elasticsearch 获得了极大的欢迎。 在关系数据库中搜索始终会遇到有关可伸缩性和性能的问题。Elasticsearch 是 NoSQL 数据库,在解决这些问题方面非常成功。 它提供了出色的可拓展性和性能,而最突出的功能之一就是相关性分析,它使搜索结果具有很大的灵活性。
Elastic Stack
安装 Elasticsearch 及 K..
Go项目优化——使用Elasticsearch搜索引擎
脑袋装水的博客
10-14
476
go项目——搜索优化:
使用Elasticsearch搜索引擎
超详细ELK日志分析系统配置过程
咕咕咕daisy!
01-06
499
ELK简介
数据收集和展示的工具
组成
ELK: elasticsearch + logstash + kibana
日志服务器
提高安全性
集中存放日志
缺陷
·对日志的分析困难
格式化目的:输出为一个标准可以作为展示页面的输出
向elasticSearch中存数据
田园园野的博客
07-20
1037
type Tweet struct {
User string
Message string
func main() {
client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL("http://192.168.31.177:9200/"))
if err != nil {
fmt.P...
Elasticsearch
weixin_30470643的博客
09-13
293
目录
一、Elasticsearch
1.1 介绍
1.2 Elasticsearch能做什么
1.3 Elasticsearch基本概念
1.3.1 Near Realtime(NRT) 几乎实时
1.3.2 Cluster 集群
1.3...
Go --- go-elasticsearch介绍及简单使用
weixin_52025712的博客
08-09
1656
go-elasticsearch的简单使用
Elasticsearch的增删改查基本操作
u014225032的博客
12-06
636
对es的curd操作
golang 查询 ES 最简单的 demo
Lucky小黄人的博客
08-21
1130
分页多条件查询 ES
func TestESQueryDemo() {
// ES SDK 教程:https://www.yisu.com/zixun/694102.html
query := elastic.NewBoolQuery().
Must(elastic.NewMatchQuery("lastname", "smith")).
...
Go Elasticsearch 增加快速入门
Dablelv 的博客专栏。
10-26
1265
文章目录1.创建单个文档1.1 Golang1.2 RESTful API2.批量创建文档2.1 Golang2.1 RESTful API参考文献
创建完 ES 的 index,便可以向 index 中添加记录。
1.创建单个文档
1.1 Golang
借助 IndexService 创建指定 ID 的文档。
// Create2ES 添加记录到 ES
func Create2ES(ctx context.Context, index, id, json string) error {
_, err .
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
谬也
CSDN认证博客专家
CSDN认证企业博客
码龄4年
暂无认证
144
原创
5万+
周排名
2万+
总排名
21万+
访问
等级
2167
积分
24
粉丝
194
获赞
50
评论
370
收藏
私信
关注
热门文章
共识算法 --- PBFT、Raft和Paxos
13296
FT、NFT、ERC-20协议和ERC-721协议
12808
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和(java实现)
11241
mac配置java环境
8957
输出数组的最大值、最小值及其位置
8134
分类专栏
算法
50篇
区块链
8篇
go
22篇
数据库
15篇
中间件
6篇
解决方案
6篇
数据结构
7篇
杂论
16篇
Linux命令
4篇
各种报错集锦
16篇
软件安装
8篇
Java
6篇
python
2篇
前端学习
2篇
最新评论
【go】CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。
programmer_ada:
哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加内容的多样性(例如使用标准目录、标题、图片、链接、表格等元素);(2)增加条理清晰的目录;(3)文章不宜太短。
mac配置java环境
HDU鬼先生:
我本地已经有openjdk了 貌似不能替换
curl --- post请求参数过长(超过1024B)时请求失败
持续高温:
感谢博主,搜了一堆都是复制,只有您这个给出了解决方法,感谢
docker搭建私有仓库
谬也:
感谢指出!已修改!
docker搭建私有仓库
混沌之恶咕哒子:
push完之后的那个验证的URL写错了,v2后面少了个斜线
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
时序数据库基本概念学习
主流时序数据库分析及选型
go --- 常用签名流程整理(hmac)
2022年57篇
2021年24篇
2020年22篇
2019年55篇
目录
目录
分类专栏
算法
50篇
区块链
8篇
go
22篇
数据库
15篇
中间件
6篇
解决方案
6篇
数据结构
7篇
杂论
16篇
Linux命令
4篇
各种报错集锦
16篇
软件安装
8篇
Java
6篇
python
2篇
前端学习
2篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
谬也
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值