一、ES简介
Elasticsearch简称ES,是一个开源的分布式、RESTful风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。ES在Apache Lucene封装了一层,使全文检索变得简单易用。
ES的特点如下:
一个分布式的实时文档存储,每个字段可被索引和搜索;
能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据。
二、ES的安装
从官网下载:https://www.elastic.co/cn/downloads/elasticsearch
解压后,执行:
cd elasticsearch-<version>
./bin/elasticsearch
启动成功后,ES就运行在本地的9200端口,打开:http://localhost:9200/,如果能看到以下内容,说明启动成功,可以看到版本号是7.13.1。
{
"name": "wangjundeMacBook-Pro.local",
"cluster_name": "elasticsearch",
"cluster_uuid": "OBNQJ5cpT9mff6vvpvmCcw",
"version": {
"number": "7.13.1",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "9a7758028e4ea59bcab41c12004603c5a7dd84a9",
"build_date": "2021-05-28T17:40:59.346932922Z",
"build_snapshot": false,
"lucene_version": "8.8.2",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
三、Kibana的安装
Kibana是一个开源的分析和可视化平台,旨在与ES合作。Kibana提供搜索、查看和存储在ES索引中的数据进行交互的功能。开发人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。
从官方下载:https://www.elastic.co/cn/downloads/kibana
解压后执行:
cd kibana-<version>
./bin/kabana
启动成功后,ES就运行在本地的5601端口,打开:http://localhost:5601/,如果能看到正常的运行web页面,说明启动成功。
四、ES的实践
实践之前先明确一下es的存储结构:
index:索引,数据的顶层单位,可以理解为mysql中的一个数据库;
document:index的单条记录成为document(文档),同一个index的document最好有相同的结构,有利于提高搜索效率,可以理解为mysql中的一行数据;
type:document可以分组,比如一个index里面存储的是weather(天气)数据,这些数据可以按照城市分组也可以按照天气分组。(目前7.x版本一个index只能有一个type),可以理解为mysql中的一个表。
4.1 数据增加
# 新建名为accounts的index
curl -X PUT 'localhost:9200/accounts'
# 新增数据,其中1为数据的id,可以为任意字符串
curl -H "Content-Type: application/json" -X PUT localhost:9200/accounts/doc/1 -d '
{
"body":"body1"
}'
# 新增数据,不指定id,es会自动生成一个id
curl -H "Content-Type: application/json" -X POST localhost:9200/accounts/doc -d '
{
"body":"body2"
}'
4.2 数据删除
# 删除index
curl -X DELETE 'localhost:9200/weather'
# 删除数据
curl -X DELETE localhost:9200/accounts/doc/1
4.3 数据查找
# 查询单条数据
curl 'localhost:9200/accounts/doc/1?pretty=true'
{
"_index" : "accounts",
"_type" : "doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 10,
"_primary_term" : 1,
"found" : true,
"_source" : {
"body" : "body1"
}
}
# 查询所有数据
curl 'localhost:9200/accounts/doc/_search?pretty=true'
# 全文搜索
curl -H "Content-Type:application/json" 'localhost:9200/accounts/doc/_search?pretty=true' -d '
{
"query" : { "match" : { "body" : "body1" }}
}'
4.4 数据修改
# 和新增数据一样语法,新数据会覆盖老数据
curl -H "Content-Type: application/json" -X PUT localhost:9200/accounts/doc/1 -d '
{
"body":"body2"
}'
五、对比
5.1 与mysql的对比
1.概念差别对比
2.查询速度,es采用倒排索引对于复杂查询es比mysq使用B+树的正排索引更有优势。
3.es适用于全文检索,日志分析,监控分析等场景。
参考:
https://developer.51cto.com/art/201904/594615.htm#topx