一,应用场景
- 海量数据搜索引擎,
- 地图数据,附近好友,支持结构化数据,非结构化数据
- 聚合分析,大数据存储
- 分布式,易扩展
补充:海量数据如何选型
MySql,Redis内存数据库,不支持大量数据
mongoDB适用于数据管理
Solr和Elasticsearch在搜索上才能匹敌
数据迁移的工具:管道
下载地址:http://www.elastic.show/download/Elasticsearch/
或者直接下载对应的浏览器的插件
_name 以_开头的表示对应的api
ES 采用restFul风格对数据进行增删改查
_search : 可以理解为查询语句
_maping : 可以理解为查看表结构
canal伪装成slave,同步数据
二,全文检索
三,ES简介
全文搜索引擎服务器
提供了大量restful风格的api接口
ES中的索引(数据库),类型(表),文档(行)
三,安装
docker ps -f 容器名:实时查看容器的日志文件
四,kibana
(es的客户端)
version: "3"
volumes:
data:
config:
plugin:
networks:
es:
services:
elasticsearch:
image: elasticsearch:7.14.0
ports:
- "9200:9200"
- "9300:9300"
networks:
- "es"
environment:
- "discovery-type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data:/usr/share/elasticsearch/data
- config:/usr/share/elasticsearch/config
- plugin:/usr/share/elasticsearch/plugins
kibana:
image: kibana:7.14.0
ports:
- "5601:5601"
networks:
- "es"
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
kibana.yml
server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: ["http://elasticsearch:9200"]
monitoring.ui.container.elasticsearch.enabled: true
docker-compose up -d 启动
五,基本的概念
5.1 index 索引(索引库)
我们为什么使用ES?因为想把数据存进去,然后再查询出来。
我们在使用Mysql或者Oracle的时候,为了区分数据,我们会建立不同的数据库,库下面还有表的。
其实ES功能就像一个关系型数据库,在这个数据库我们可以往里面添加数据,查询数据。
ES中的索引非传统索引的含义,ES中的索引是存放数据的地方,是ES中的一个概念词汇
index类似于我们Mysql里面的一个数据库 create database user; 好比就是一个索引库
5.2 type类型
类型是用来定义数据结构的
在每一个index下面,可以有一个或者多个type,好比数据库里面的一张表。
相当于表结构的描述,描述每个字段的类型。
5.3 document:文档
文档就是最终的数据了,可以认为一个文档就是一条记录。
是ES里面最小的数据单元,就好比表里面的一条数据5.5
5.4 Field 字段
好比关系型数据库中列的概念,一个document有一个或者多个field组成。
5.5 shard:分片
一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。
kafka:为什么支持分布式的功能,因为里面是有topic,支持分区的概念。所以topic A可以存在不同的节点上面。就可以支持海量数据和高并发,提升性能和吞吐量
5.6 replica:副本
一个分布式的集群,难免会有一台或者多台服务器宕机,如果我们没有副本这个概念。就会造成我们的shard发生故障,无法提供正常服务。
我们为了保证数据的安全,我们引入了replica的概念,跟hdfs里面的概念是一个意思。
可以保证我们数据的安全。
在ES集群中,我们一模一样的数据有多份,能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片)
当我们去查询数据的时候,我们数据是有备份的,它会同时发出命令让我们有数据的机器去查询结果,最后谁的查询结果快,我们就要谁的数据(这个不需要我们去控制,它内部就自己控制了)
总结:
在默认情况下,我们创建一个库的时候,默认会帮我们创建5个主分片(primary shrad)和5个副分片(replica shard),所以说正常情况下是有10个分片的。
同一个节点上面,副本和主分片是一定不会在一台机器上面的,就是拥有相同数据的分片,是不会在同一个节点上面的。
所以当你有一个节点的时候,这个分片是不会把副本存在这仅有的一个节点上的,当你新加入了一台节点,ES会自动的给你在新机器上创建一个之前分片的副本。
6. ES的相关命令
GET _cat/health 查看集群的健康状况
GET _all
GET _cat/indices 查看集群中所有的索引
PUT 类似于SQL中的增
DELETE 类似于SQL中的删
POST 类似于SQL中的改
GET 类似于SQL中的查
6.1 index相关的操作
_mapping:操作映射
_doc:操作文档
注意索引的操作没有修改操作。
创建index
PUT /new_index
删除index
DELETE /new_index
查看index
GET _cat/indices
注意:索引中的mapping不能修改,错误之后只能删除
7. ES的CURD操作(针对数据本身)
7.1 插入数据
// 数据库 数据表 一天数据的id
PUT /ecomerce/product/1
{
"name":"dior channel",
"desc":"shanghai gaodong",
"producer":"dior producer",
"tags":["shishang","shechi"]
}
7.2 查看数据
GET /ecomerce/product/1
7.3 修改数据
post和put都可以更新数据,区别:
- post可以局部更新,有点像增量更新,会保留之前不冲突的数据
- put 就是全量更新,就是会用新的put的内容去覆盖旧的所有的数据
PUT /index/_doc/1
{
"name":"dior channel",
"desc":"shanghai gaodong",
"producer":"dior producer",
"price":988,
"tags":["shishang","shechi"]
}
POST /ecomerce/product/1
{
"price":988
}
//这里post修改后的效果同上面的put修改后的效果是一样的
7.3 删除数据
DELETE /ecomerce/product/1
删除不会立即物理上删除,类似于逻辑删除。
注意:每一次操作,对应的数据的版本都会加一
7.3 _search查询数据
- 查询所有
GET /ecomerce/product/_search
{
"query":{
"match_all":{ // 匹配所有}
}
}
- 标准查询
match
查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
GET /ecomerce/product/_search
{
"query":{
"match":{
"name":"chenyi"
}
},
"sort":{
"price":{ //根据价格倒序排列
"order":"desc"
}
}
}
- 分页查询
GET /ecomerce/product/_search
{
"query":{
"match":{
"name":"chenyi"
}
},
"sort":{
"price":{ //根据价格倒序排列
"order":"desc"
}
},
"from":0, //从第几个数据开始
"size":2 //每页数据的个数
}
- 指定返回字段
GET /ecomerce/product/_search
{
"query":{
"match_all":{
}
},
"source":["name","price"]
}
- 多条件查询
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:
must :: 多个查询条件的完全匹配,相当于 and。
must_not :: 多个查询条件的相反匹配,相当于 not。
should :: 至少有一个查询条件匹配, 相当于 or。
这些参数可以分别继承一个过滤条件或者一个过滤条件的数组
GET /ecomerce/product/_search
{
"query":{
"bool":{
"must":{ //相当于 and
"match":{
"name":"chenyi"
}
}
},
"filter":{
"range":{
"price":{
"gt":250
}
}
}
}
}
注意:match查询时,会对查询条件分词,若不想分词查询,使用 "match_phrase"
原文链接:https://blog.csdn.net/JENREY/article/details/81290535