随着生产环境数据的急剧膨胀,传统关系型数据库在查询性能、扩容缩容等方面代价越来越高,我们需要一个具有扩展性好、查询性能高的NoSQL服务作为辅助[缓存]来弥补关系型数据库这方面的不足。
近年来存储器结束了双雄争霸[Mysql,Oracle]迎来了多元化的时代,如Redis、MongoDB、TiDB、Hadoop等。ElasticSearch是一个使用Restful接口基于Lucene引擎开发的去中心化的全文搜索引擎,可以将关系型数据库中一些数据作为“缓存”存储在es中以适应更复杂条件下的高性能查询。
一、环境搭建
es的官方文档做的很好,我们可以参考官方文档,我找了目前最新的稳定版本镜像安装方式: Quick start | Elasticsearch Guide [7.16] | Elastic
1.1 环境准备
准备一台机器,本人是虚拟机192.168.42.101
新建目录:/root/docker/es 并在该目录下新建文件夹config、data、plugins
1.2 下载镜像及初始化配置
//镜像下载
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.0
docker pull docker.elastic.co/kibana/kibana:7.16.0
//创建自定义网络[可不创建]
docker network create elastic
//设置可外网访问的配置
echo "network.host: 0.0.0.0">>/root/docker/es/config/elasticsearch.yml
1.3 安装
//安装es
docker run --name es --net elastic -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /root/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/docker/es/data:/usr/share/elasticsearch/data \
-v /root/docker/es/plugins:/usr/share/elasticsearch/plugins \
-d docker.elastic.co/elasticsearch/elasticsearch:7.16.0
//es启动好后安装kibana
docker run --name kibana --net elastic -p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://es:9200" \
-d docker.elastic.co/kibana/kibana:7.16.0
1.4 外网访问测试
ps:安装时提示:IPv4 forwarding is disabled. Networking will not work.
需要修改下网络配置,否则外网会无法访问es:
vim /etc/sysctl.conf //修改文件
net.ipv4.ip_forward=1 //修改成1,若没有则添加
systemctl restart network //重启网络服务让配置生效
1.5 熟悉kibana
add integrations是集成第三方软件的文档,写的很全,但刚开始不需要集成什么.
我们选择自行探索explore on my own,然后选择集成旁边的Try sample data,这里有三个模板数据可以选择也可以自行导入,我选择中间这个。
等待下载完成,可以查看kibana做的漂亮的数据图表
1.6 学习使用工作台
点击左侧边栏,选择Discover
选择第一条数据展开,查看数据详情。左边是field,右边是value
添加初始过滤条件,比如根据指定索引查询,就当是表名或者数据库名吧
查看field,可以列出数量最多的前5条,点加号加入查询该字段
这么看是不是就比较有感觉了,KQL语法查询(kibana搞出来的一套简化查询语句的语法),此处相当于 where xx = US
前面自动填充的列也不一定要填,不填就会用参数值匹配每一个字段。此处得用*作前缀查询,如果添加了分词器,则可以支持更智能的全文查询,就像用百度一样了
点击由上角的Inspect可以查看此次查询分析,还可以查看查询语句和返回的结果json结构
这儿就是我们手动执行Lucene语句的地方了,后面练习es的语法主要就在这儿,点开侧边栏选择dev tools,这边有语句执行的profiler分析