赞
踩
Elasticsearch(简称ES)是一个分布式、可扩展、实时的搜索与数据分析引擎,它基于Apache Lucene构建,提供了全文搜索、结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等多种功能。
分布式架构:
高性能:
多语言支持:
RESTful API:
丰富的查询方式:
可扩展性:
高可用性:
全文搜索:
日志分析:
数据分析:
地理位置搜索:
个性化推荐:
元数据管理:
优点:
缺点:
通常搜索引擎包括了数据采集模块、文本分析模块、索引存储模块、搜索模块等。
拉取镜像
docker pull elasticsearch:7.4.2 //存储和检索数据
docker pull kibana:7.4.2 //可视化检索数据
创建挂载目录
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
// 任何远程机器都能访问es
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ 改变文件权限
创建elasticsearch容器实例
docker run -d -p 9200:9200 -p 9300:9300 \
--restart=always \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--name elasticsearch elasticsearch:7.4.2
命令解释:
-e “discovery.type=single-node”:使es单节点运行
-e ES_JAVA_OPTS=“-Xms64m -Xmx512m”:设置es占用的内存
开放对应的端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --zone=public --query-port=9200/tcp
访问9200端口测试
创建kibana容器实例
docker run -d -p 5601:5601 \
--restart=always \
-e ELASTICSEARCH_HOSTS=http://192.168.26.160:9200 \
--name kibana \
kibana:7.4.2
开放对应端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
systemctl restart firewalld.service
访问对应的5601端口
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。
文档数据会被序列化为json格式后存储在elasticsearch中。
索引(index):相同类型的文档的集合
映射(mapping):索引中文档的字段约束信息,类似表的结构约束
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(column) |
Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticserch,实现CRUD |
MySQL:擅长事物类型操作,可以确保数据的安全和一致性
Elaticsearch:擅长海量数据的搜索,分析,计算
总结
文档:一条数据就是一个文档,es中是Json格式
字段:Json文档中的字段
索引:同类型文档的集合
映射:索引中文档的约束,比如字段名称,类型
elasticaserch与数据库的关系:
GET /_cat/nodes
:查看所有节点
GET /_cat/health
:查看 es 健康状况
GET /_cat/master
:查看主节点
GET /_cat/indices
:查看所有索引
相当于Mysql数据库的show databases
PUT 和 POST 都可以, POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号 。
PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改操作,不指定 id 会报错。
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识 PUT customer/external/1;
在 customer 索引下的 external 类型下保存 1 号数据为
POST /customer/external/1
保存的数据
{
"name": "zhangsan"
}
如果当前索引不存在就会自动创建:
POST /customer/external/1/_update
{
"doc": {
"name": "lisi"
}
}
此种方式会查询数据,如果相同不允许修改
POST /customer/external/1/
{
"name": "zhangsan"
}
PUT /customer/external/1/
{
"name": "zhangsan"
}
GET /索引/类型/数据id
结果:
{
"_index": "customer",//在哪个索引
"_type": "external",//在哪个类型
"_id": "1", //记录 id
"_version": 6,//版本号
"_seq_no": 5,//并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 1,//同上,主分片重新分配,如重启,就会变化
"found": true, //查询是否成功
"_source": { //真正的内容
"name": "zhangsan"
}
}
DELETE /customer/external/1
POST /customer/external/_bulk
{"index":{"_id":"1"}}
{"name":"John Doe"}
{"index":{"_id":"2"}}
{"name":"Jane Doe"}
语法格式:
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n
切换到kibana的Dev Tools指定命令
对应GET的查询结果,其中有一个字段_sep_no,其为了是进行并发控制,当修改数据后,对应的_sep_no版本就会更改。
实现方式:
更新携带 ?if_seq_no=*&if_primary_term=1
再次指定_sep_no为相同值将不会生效
高性能分布式搜索引擎Elasticsearch
Elasticsearch搜索引擎
搜索引擎——Elasticsearch
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。