Elasticsearch 快速起步
1. 简介
Elasticsearch 是一个高可靠开源全文搜索与分析引擎,可以让我们实时存储、查询、分析海量数据
具有安装方便、稳定可靠、快速、实时等特点,是当前流行的企业级搜索引擎
应用场景示例:
- 在线商店中的产品搜索,可以使用 Elasticsearch 来存储产品信息,让客户快速的搜索,可以方便的实现搜索时的自动完成功能
- 数据搜集,进行趋势分析、统计、监控异常现象 等等,使用 Logstash 采集数据,存储到 Elasticsearch 中,然后就可以搜索、聚合自己感兴趣的内容
2. 基本概念
Cluster
一组 server 集合构成的集群,这些 server 一起存在数据、提供索引与搜索功能
cluster 是有名字的,默认是 "elasticsearch",这个名字很重要,一个 server 只能属于一个 cluster,就是根据这个名字建立关系的,所以名字要规划好,例如 logging-dev、logging-prod 分别作为开发、产品环境下的cluster
Node
cluster 中的一个 server 就是 node 节点,node 也有名字,默认是一个 UUID
Index
有相似属性文档的集合,例如客户数据 index、产品分类 index、订单数据 index
index 使用一个全小写的 name 作为标识
Type
一个 index 内可以定义一个或多个 type,type 是 index 中的逻辑分类
例如,一个博客系统,把所有数据都存储在一个 index 中,其中就可以有多个 type,用户数据 type、博客数据 type、评论数据 type
Document
是可被索引的基本信息单元,例如,一个客户的 document、一个产品的 document、一条订单的 document
document 使用 JSON 来描述,在一个 index 或者 type 中,可以保存任意数量的 document
一个 document 必须属于 index 中的某个 type
3. 安装
前提:安装好JAVA环境
下载
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
解压
tar -xvf elasticsearch-5.2.2.tar.gz
启动
cd elasticsearch-5.2.2/bin
./elasticsearch
会输出一系列日志信息,启动完成后会打印出 started
4. 操作示例
列出所有 index
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
新建 index
新建一个名为 customer
的 index
curl -XPUT 'localhost:9200/customer?pretty&pretty'
列出所有 index,看是否添加成功
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
向 index 中添加一个 document
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
意思是添加到 customer
这个 index 中的 external
type,ID为 1
document 内容是
{
"name": "John Doe"
}
Elasticsearch 并不需要在插入 document 之前先创建好 index,上面例子中,如果 customer 这个 index 不存在,会自动创建
根据 ID 取 document
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
返回信息
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 2,
"found" : true,
"_source" : {
"name" : "John Doe"
}
}
删除 index
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
之前的 customer 已经没有了
替换 document
先新建一个 document,ID 为 1
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty'
-H 'Content-Type: application/json' -d'
{
"name": "华仔"
}
'
查看一下
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "华仔"
}
}
替换成新的 document,同样指定ID为 1 即可
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty'
-H 'Content-Type: application/json' -d'
{
"name": "德华"
}
'
再查看一下
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 4,
"found" : true,
"_source" : {
"name" : "德华"
}
}
修改 document 数据
修改上面 ID 为 1 的 document 的 name
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"doc": { "name": "学友" }
}
'
修改 name
同时添加一个 age
属性
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"doc": { "name": "富城", "age": 20 }
}
'
查看一下 document
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
修改数据时还可以使用一些简单的脚本,例如 给 age 增加 5 岁
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"script" : "ctx._source.age += 5"
}
'
删除 document
curl -XDELETE 'localhost:9200/customer/external/1?pretty&pretty'
5. 小结
从上面的实践中可以发现 Elasticsearch 非常方便,没有复杂的安装过程,操作是 REST 风格,简单易懂,概念也很好理解
- 简单易学的机器学习算法——受限玻尔兹曼机RBM
- 博客群发(2)--实现登陆
- 算法——递推算法
- 算法——贝叶斯
- 机器学习算法实现解析——liblbfgs之L-BFGS算法
- 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization
- 虚拟化平台cloudstack(2)——安装(上)
- 机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法
- 虚拟化平台cloudstack(3)——安装(下)
- 机器学习算法实现解析——libFM之libFM的训练过程概述
- 虚拟化平台cloudstack(4)——几个异常
- Golang语言 xml解析实例
- 机器学习算法实现解析——libFM之libFM的模型处理部分
- Go语言使用protobuf数据通信--师出同门,懂的人理解吧
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- nginx配置https
- 近期问题: jq循环中异步请求问题
- 启用HSTS并加入HSTS Preload List-附删除HSTS方法
- 聊聊UI标准化
- puppeteer学习----登录人才网并截图
- MySQL 案例:用户鉴权与 Host 优先级
- Http Post 快速使用
- 有赞Flutter插件开发与发布
- 国标GB28181协议客户端EasyGBS国标视频平台级联EasyNVR:EasyGBS如何实现调阅EasyNVR的视频通道?
- gitlab CI/CD 相关问题
- 微信jssdk分享接口
- 有赞 Flutter 混编方案
- 最近开发问题
- echarts相关问题总结
- 视频上云EasyNTS组网硬件设备登录后自动下线并清除设备信息是什么原因?