ElasticSearch介绍 · Go语言中文文档


本站和网页 https://www.topgoer.com/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C/go%E6%93%8D%E4%BD%9Celasticsearch/elasticsearch%E4%BB%8B%E7%BB%8D.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

ElasticSearch介绍 · Go语言中文文档
前景
开发环境
Go的安装
配置GOPATH
编辑器
Git安装
第一个go程序
Go基础
Go语言的主要特征
Golang内置类型和函数
Init函数和main函数
命令
运算符
下划线
变量和常量
基本类型
数组Array
切片Slice
Slice底层实现
指针
Map
Map实现原理
结构体
流程控制
条件语句if
条件语句switch
条件语句select
循环语句for
循环语句range
循环控制Goto、Break、Continue
函数
函数定义
参数
返回值
匿名函数
闭包、递归
延迟调用(defer)
异常处理
单元测试
压力测试
方法
方法定义
匿名字段
方法集
表达式
自定义error
面向对象
匿名字段
接口
网络编程
互联网协议介绍
socket编程
socket图解
TCP编程
UDP编程
TCP黏包
http编程
WebSocket编程
并发编程
并发介绍
Goroutine
runtime包
Channel
Goroutine池
定时器
select
并发安全和锁
Sync
原子操作(atomic包)
GMP 原理与调度
爬虫小案例
数据操作
go操作MySQL
go操作MySQL
Insert操作
Select操作
Update操作
Delete操作
MySQL事务
go操作Redis
Redis介绍
链接Redis
String类型Set、Get操作
String批量操作
设置过期时间
List队列操作
Hash表
Redis连接池
go操作ETCD
ETCD介绍
操作ETCD
zookeeper
基本操作测试
简单的分布式server
Zookeeper命令行使用
go操作kafka
Kafka介绍
Kafka深层介绍
Kafka的安装
操作Kafka
go操作RabbitMQ
RabbitMQ介绍
RabbitMQ安装
Simple模式
Work模式
Publish模式
Routing模式
Topic模式
go操作ElasticSearch
ElasticSearch介绍
Elasticsearch安装
Kibana安装
操作ElasticSearch
NSQ
安装
生产者
消费者
GORM
入门指南
概览
模型定义
惯例
连接数据库
CRUD 接口
创建
查询
更新
删除
关联
Belongs To
Has One
Has Many
Many To Many
关联
预加载
教程
链式操作
错误处理
钩子
事务
数据库迁移
原生 SQL 和 SQL 生成器
通用数据库接口
高级主题
复合主键
创建插件
GORM Dialects
自定义Logger
更新日志
Gorm用法介绍
xorm
go操作memcached
常用标准库
fmt
Time
Flag
Log
IO操作
Strconv
Template
Http
Context
数据格式
反射
beego框架
简介
beego 安装
beego 安装升级
bee工具的使用
快速入门
新建项目
路由设置
Controller运行机制
Model逻辑
View编写
静态文件处理
beego的MVC架构介绍
controller设计
参数配置
路由设置
控制器函数
XSRF过滤
请求数据处理
Session控制
过滤器
Flash数据
URL构建
多种格式数据输出
表单数据验证
错误处理
日志处理
model设计
概述
ORM使用
CRUD操作
高级查询
原生SQL查询
构造查询
事务处理
模型定义
命令模式
测试用例
自定义字段
FAQ
view设计
模板语法指南
模板处理
模板函数
静态文件处理
模板分页处理
beego的模块设计
Session模块
Grace模块
Cache模块
Logs模块
Httplib模块
Context模块
Toolbox模块
Config模块
I18n模块
beego高级编程
进程内监控
API自动化文档
应用部署
独立部署
Supervisor部署
Nginx部署
Apache部署
beego第三方库
应用例子
在线聊天室
短域名服务
Todo列表
beego实用库
验证码
分页
FAQ
gin框架
简介
gin路由
基本路由
Restful风格的API
API参数
URL参数
表单参数
上传单个文件
上传多个文件
routes group
路由原理
路由拆分与注册
gin 数据解析和绑定
Json 数据解析和绑定
表单数据解析和绑定
URI数据解析和绑定
gin 渲染
各种数据格式的响应
HTML模板渲染
重定向
同步异步
gin 中间件
全局中间件
Next()方法
局部中间件
中间件练习
中间件推荐
会话控制
Cookie介绍
Cookie的使用
Cookie练习
Cookie的缺点
Sessions
参数验证
结构体验证
自定义验证
多语言翻译验证
其他
日志文件
Air实时加载
gin验证码
生成解析token
权限管理
gin 源码解读
net/http的大概流程
揭开gin的神秘面纱
gin牛逼的context
gin的路由算法
Iris框架
关于
安装
开始使用
Host
带有TLS的自动公共域名
配置
路由
路径参数类型
反向查询
中间件
处理HTTP错误
子域名
包装路由器
重写Context
Context方法
HTTP Method Override
API版本控制
内容协商
响应记录器
HTTP Referer
请求认证
URL查询参数
表单
模型验证
缓存
文件服务
视图
Cookies
Sessions
Websockets
MVC
测试
Echo框架
微服务
认识微服务
微服务生态
微服务详解
RPC
RPC系统文档
Raft
gRPC
安装
gRPC简介
Protobuf⇢Go转换
Protobuf语法
小案例
OpenSSL安装
认证
拦截器
内置Trace
HTTP网关
Go Micro入门
Go Micro接口详解
Go Micro文档1.x
Go Micro文档2.x
Go高级
快速排序算法
堆排序算法
冒泡排序算法
二分查找方法
选择排序算法
基数排序算法
拓扑排序
字符串匹配
二叉搜索树
散列表
链表
跳跃表
字典树
向量空间
插件库
跨平台交叉编译
文件上传
依赖管理
高效读取配置信息
实时读取文件内容
加密解密
哈希算法
加密解密
md5
base64
sha
hmac
跨域
系统性能数据gopsutil库
pprof性能调优
数据绑定结构体
查询结果反射结构体
form数据绑定结构体
验证器
验证码
流量控
发邮件
页面静态化
文件监控
雪花算法
函数验证中间键
封装websocket
生成PDF
获取HTTP请求的IP地址
JSON Web令牌
检查切片中是否存在元素
查看图片主要颜色
判断字符串开头
字符串中解析日期
压缩解压文件
PDF转JPG
Sessions
markdown解析库
选项设计模式
运行系统命令和二进制文件
proxy转发
字符串数组排序
带进度条大文件下载
gjson
解决中文乱码
二维码
Yaml编码和解码
中文分词
权限管理
Swaggo
网页截图
汉字转拼音
CLI框架
Google 翻译API
限流器
缓存
支付插件
获取https过期时间
获取服务器配置
热重启
原生中间件
设置https
项目
github库地址
TCP扫描器
定时任务
cron
gocron
基于角色的访问控制框架
uuid
支付宝支付
微信支付
微信公众号开发
爬虫小案例
千万数据过滤
需求
读入数据
数据清洗
省份划分
go-admin
go-vue-admin
go-admin
log
Logger
Zap Logger
日志切割归档
聊天室小案例
性能压测工具wrk
gcc安装
开源仓库
go学习线路图
音频和音乐
身份验证和OAuth
机器人相关
标准CLI
构建用户界面库
配置
持续集成
CSS预处理器
数据结构
数据库
数据库
数据库架构迁移
数据库工具
SQL查询构建器
数据库驱动
关系数据库
NoSQL数据库
搜索和分析数据库
多个后端
日期和时间
分布式系统
电子邮件
嵌入式脚本语言
错误处理
文件
金融
Forms
功能性
游戏开发
生成与泛型
地理位置
编译器
Goroutines
图形界面
图片
物联网
工作计划
JSON格式
Logging
机器学习
实现消息传递
微软办公软件
依赖注入
项目布局
Strings
其他
自然语言处理
网络
HTTP客户端
OpenGL
ORM
包管理
性能
查询语言
资源嵌入
科学与数据分析
安全
序列化
服务器应用
流处理
模板引擎
测试
文字处理
第三方API
实用工具
UUID
验证方式
版本控制
视频
Web框架
中间件
路由器
视窗
XML格式
代码分析
编辑器插件
硬件
go生成工具
go工具
DevOps工具
持续更新...
其他
Golang 58个坑
资料下载
零碎知识点
面试题
go中文标准文档
go专家编程
go设计模式
go公众号开发
关于
更新列表
持续更新中...
豫ICP备20001572号
ElasticSearch介绍
1. ElasticSearch介绍1.1.1. 介绍1.1.2. Elasticsearch能做什么1.1.3. Elasticsearch基本概念1.1.4. ES API1. ElasticSearch介绍
1.1.1. 介绍
Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
1.1.2. Elasticsearch能做什么
当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用ElasticSearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。
当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这引起数据存储到ElasticsSearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。
对于程序员来说,比较有名的案例是GitHub,GitHub的搜索是基于ElasticSearch构建的,在github.com/search页面,你可以搜索项目、用户、issue、pull request,还有代码。共有40~50个索引库,分别用于索引网站需要跟踪的各种数据。虽然只索引项目的主分支(master),但这个数据量依然巨大,包括20亿个索引文档,30TB的索引文件。
1.1.3. Elasticsearch基本概念
Near Realtime(NRT) 几乎实时
Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。
Cluster 集群
群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。
确保在不同的环境中不要使用相同的群集名称,否则可能会导致连接错误的群集节点。例如,你可以使用logging-dev、logging-stage、logging-prod分别为开发、阶段产品、生产集群做记录。
Node节点
节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。这个名字对管理很重要,目的是要确定你的网络服务器对应于你的ElasticSearch群集节点。
我们可以通过群集名配置节点以连接特定的群集。默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群。
在单个群集中,你可以拥有尽可能多的节点。此外,如果“elasticsearch”在同一个网络中,没有其他节点正在运行,从单个节点的默认情况下会形成一个新的单节点名为”elasticsearch”的集群。
Index索引
索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,你可以定义尽可能多的索引。
Type类型
在索引中,可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全取决于你。一般来说,类型定义为具有公共字段集的文档。例如,假设你运行一个博客平台,并将所有数据存储在一个索引中。在这个索引中,你可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为注释数据定义另一类型。
Document文档
文档是可以被索引的信息的基本单位。例如,你可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。
在索引/类型中,你可以存储尽可能多的文档。请注意,尽管文档物理驻留在索引中,文档实际上必须索引或分配到索引中的类型。
Shards & Replicas分片与副本
索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。
为了解决这一问题,Elasticsearch提供细分你的指标分成多个块称为分片的能力。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。
Shards分片的重要性主要体现在以下两个特征:
1.副本为分片或节点失败提供了高可用性。为此,需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里复制过来的。
2.副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行。
ES基本概念与关系型数据库的比较
ES概念
关系型数据库
Index(索引)支持全文检索
Database(数据库)
Type(类型)
Table(表)
Document(文档),不同文档可以有不同的字段集合
Row(数据行)
Field(字段)
Column(数据列)
Mapping(映射)
Schema(模式)
1.1.4. ES API
以下示例使用curl演示。
查看健康状态
curl -X GET 127.0.0.1:9200/_cat/health?v
输出:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1564726309 06:11:49 elasticsearch yellow 1 1 3 3 0 0 1 0 - 75.0%
查询当前es集群中所有的indices
curl -X GET 127.0.0.1:9200/_cat/indices?v
输出:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana_task_manager LUo-IxjDQdWeAbR-SYuYvQ 1 0 2 0 45.5kb 45.5kb
green open .kibana_1 PLvyZV1bRDWex05xkOrNNg 1 0 4 1 23.9kb 23.9kb
yellow open user o42mIpDeSgSWZ6eARWUfKw 1 1 0 0 283b 283b
创建索引
curl -X PUT 127.0.0.1:9200/www
输出:
{"acknowledged":true,"shards_acknowledged":true,"index":"www"}
删除索引
curl -X DELETE 127.0.0.1:9200/www
输出:
{"acknowledged":true}
插入记录
curl -H "ContentType:application/json" -X POST 127.0.0.1:9200/user/person -d '
"name": "LMH",
"age": 18,
"married": true
}'
输出:
"_index": "user",
"_type": "person",
"_id": "MLcwUWwBvEa8j5UrLZj4",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
也可以使用PUT方法,但是需要传入id
curl -H "ContentType:application/json" -X PUT 127.0.0.1:9200/user/person/4 -d '
"name": "LMH",
"age": 18,
"married": false
}'
检索
Elasticsearch的检索语法比较特别,使用GET方法携带JSON格式的查询条件。
全检索:
curl -X GET 127.0.0.1:9200/user/person/_search
按条件检索:
curl -H "ContentType:application/json" -X PUT 127.0.0.1:9200/user/person/4 -d '
"query":{
"match": {"name": "LMH"}
}'
ElasticSearch默认一次最多返回10条结果,可以像下面的示例通过size字段来设置返回结果的数目。
curl -H "ContentType:application/json" -X PUT 127.0.0.1:9200/user/person/4 -d '
"query":{
"match": {"name": "LMH"},
"size": 2
}'
results matching ""
No results matching ""