elasticsearch近年来可谓非常之火啊,大家都在用,我自然也是想简单体验一波,为啥写这篇呢,自然是体验过程中又踩坑了,所以,记录一波。。。

体验环境

为了避开繁琐且充满报错的安装过程,我选择了使用docker进行部署,es官方有打包好的镜像,在后台run起来就可以直接用的那种,超级方便,但是,还是有坑。。。

既然是用docker,自然在windows,linux,macos上都欧克的,我呢,没有macos,懒得在windows装docker,于是只能再次掏出我的学生版廉价云服务器。。。

ubuntu1604,1vCPU,2G内存,这配置在很多篇里都提过了,每次提都会觉得心酸。。。说句实话,我要是有钱买个好的,很多坑压根就不会遇到。。。

安装

首先自然是安装docker了。

apt-get update
apt-get install docker.io

然后,配置一下加速器,之前在我的另一篇blogdocker基本操作中我安利了一波阿里云的容器镜像服务,最近我又发现了一个不错的,叫daocloud(按理说这个用的人更多,我应该更早发现的。。。),也是免费的,而且有自己的镜像社区,上面有很多人上传的不错的镜像,跑题了,要说的是加速器。。。打开daocloud之后,先注册一下,注册很简单,输个邮箱就行,登录上之后,节目的右上角有个小火箭,把它点开。

然后,把它给的命令复制到linux上执行就好了。

欧克,加速器配好了,下面就可以拉镜像了。说到这里,再安利一个daocloud功能,搜索镜像,如果你用过docker hub的话,那绝对是用过一次不想用第二次,打开首页十分钟,搜索个东西十分钟,当然,如果是你会翻墙的大神,那另说。。。而如果你用daocloud,不但可以搜索社区里其他人贡献的镜像,还可以直接搜索docker hub里的镜像,而且,速度那真是比直接用docker hub官网快一万倍!啥也不说了,就用它搜elasticsearch镜像了。

然后,就是拉取这个镜像了,各个版本有啥区别我也不懂,就用最后一次提交的吧。

docker pull elasticsearch:6.8.7

虽然配置了加速器,但是从dockerhub拉镜像还是慢啊,于是我就想有没有人在daocloud社区上传过这个镜像呢,一搜,还真有,看这意思好像还是daocloud官方转储的。

这玩意儿一拉,速度那真是快啊,得到10兆每秒了!

然后,就是run了,注意加两个参数,-d,后台运行,-p 9200:9200,把容器内部的9200端口映射出来,因为es默认监听的是9200端口,tcp。

docker run -d -p 9200:9200 daocloud.io/library/elasticsearch:7.3.2

跑起来以后,赶快打开流量器试了一下。

http://ip:9200/

然鹅,打不开啊。。。再一看容器的状态,已经退出了。。。

没办法,我也不懂啥具体的,只能百度了,很多帖子说,是linux默认的虚拟内存设置的太小,导致es起不来,于是按照网上说的,改到了es要求的最小值。

sysctl -w vm.max_map_count=262144

再来一次,还是不行啊。。。这真是奇怪了,看别人弄的时候,就是直接拉下来就没问题了啊。。。到底哪不对,难道是daocloud这个镜像不行?带着这个不负责任的猜测,我老老实实的等了半个小时,从dockerhub拉了es官方镜像。。。

然后,run这个官方镜像。

docker run -d -p 9200:9200 elasticsearch:6.8.7

再一试,竟然真行了。。。

终于看到了这个界面,激动啊。。。激动之余,只能甩锅给daocloud那个镜像了,还是官方的靠谱啊。。。

写入数据

es装好了,接下来自然是要用一波喽,第一次运行的es自然是不会有任何数据了,所以我们先往里面写个数据试试。

es提供rest接口,也就是用http请求就可以写入&查询,所以想要体验的话,用curl命令或者postman这种工具都是欧克的,我使用的是jetbrains每个ide都有的http client工具。

使用put或者post可以写入数据,那就先把我的名字写进去试试看。

注意path那里,需要三级路径,我这里写的是study/test/1,我们可以把es当做传统的sql数据库来理解,第一级就是数据库名,第二级就是表名,第三极就是字段名。填好path,还需要在text那里填上需要写入的内容,这里要用json格式。都填好以后,点左边那个运行按钮,然后就,失败了。。。

{"error":"Content-Type header [*/*; charset=UTF-8] is not supported","status":406}

这又是什么鬼啊。。。看这意思是编码类型不太行?百度了一下,加两个头部指明一下编码类型和body类型可能好使,试一下。

再试一次,好了!写入成功,会返回写入的结果,就是下面这一坨:

{"_index":"study","_type":"test","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

为了后面演示es强大的搜索功能,这里我又随便加了两个人名进去。

查询数据

接下来,就要体验es最为强大的全文搜索了!

查询的话可以用最简单的get,先查询一下我刚才写入的我的名字试试。

header,path都和写入的时候保持一致,就把method改成get就行了。这次很顺利,一次成功,查到了我刚写进去的名字。

再来个范围查询吧,二级路径不是可以理解为表吗,那我们就把这张表里的所有数据查出来看看。怎么操作呢,path那里,把三级路径改成_search,就欧克了。

不错,我刚才后写入的两个名字也都查出来了。

我们用es自然既不是为查一个,也不是为了查全部,而是想查我们想要的东西,也就是说,要加一定的过滤条件,那么这个过滤条件又该怎么加呢?很简单,加在get的查询参数里就好了,比如只想查询叫djqueen的,就加个q=djqueen

结果出来,就是只包含djqueen这一条了。

欧克,本篇就先浅尝辄止到这里,es怎么用,啥时候用,怎么用好,学问很多,但是在我看来,最重要的还是边学边用,搭好了试验环境,那就是迈出了一大步,哈哈。

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐