今天闲来无事决定在自己的谷歌云上安装个elasticsearch,自己正好学习一下,elasticsearch也是NoSQL的一种,而且可以和solr一样作为一个搜索引擎使用,当然elasticsearch功能不止这些,而且功能确实很强大。具体内容可以参考官网:
https://www.elastic.co/。elasticsearch官网应该说是非常良心了,文档、视频资料都有,关键还支持中文,确实值得表扬。
好了,我们第一步先在远程服务器安装elasticsearch。安装elasticsearch之前自己要先配置好JDK,我之前就已经配置好了,这里就不在详述了。首先通过本地终端连上远程服务器,我使用的Ubuntu桌面系统连接。然后在/usr/local/下新建一个elasticsearch目录,接下来就是下载安装包,你可以将本地的elasticsearch上传到远程服务器也可以直接使用:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz
命令进行下载。
我因为是下载到本地的,所以使用的是SCP命令,这样顺便学习下linux的常用命令:
scp -r 文件名 用户名@服务器地址:/home/用户名/
这里上传文件只能到服务器/home/用户名/这个目录下,自己需要移动到/usr/local/elasticsearch下面。
然后解压缩,就可以了。
然后就是启动elasticsearch,但是为了方便我想通过我的Ubuntu浏览器来访问,所以在启动之前需要先修改配置文件,也就是config目录下的elasticsearch.yml文件,将ip地址修改成我们服务器地址,为了方便我改成了0.0.0.0。修改好以后进入bin目录下,启动。结果报错:
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
网上有解决方案,参考:https://blog.csdn.net/u010466329/article/details/78594777
解决方法:
注意权限,如果权限不足记得加sudo。然后设置两个配置的值
修改后保存,然后控制台输入:
以便修改的内容生效。接下来
需要注意权限问题,在最后添加两行配置内容:
然后保存,并重新启动,见下图:
我们可以直接在终端输入:curl http://localhost:9200;进行访问这时终端会显示服务返回json格式的数据,见下图:
当然我们也可以在本地浏览器输入我们服务器ip:9200进行访问,然后就看到浏览器显示json格式的相关数据:
这说明我们elasticsearch安装启动已经成功了。本来自己还安装了kibana,它提供了一个图形的界面对elasticsearch进行一些操作,但是自己修改配置文件后,直接启动kibana是没问题的,因为它没有指向elasticsearch,所以会报错,因此必须要首先为它指定相应的elasticsearch服务实例,默认的是localhost所以我就没有修改,只需要修改server.host地址,以便通过本地浏览器进行访问即可(我也是改成了0.0.0.0),但是这时候启动kibana一直没反应,控制台也没输出,甚至我访问elasticsearch都无法访问,后来在谷歌云看了下服务器监控,发现cpu已经超荷了…...…,可能是我服务器配置太低了吧。所以自己就没有做kibana这部分内容。
接下来就是使用spring boot整合elasticsearch,spring官方还提供了ElasticsearchTemplate这个帮助类,方便了我们对elasticsearch进行些操作,但是我网上看到的很多资料使用的ElasticsearchRepository,所以自己也就跟着使用ElasticsearchRepository了,加上自己对elasticsearch的操作也还不熟悉,所以只能做一个最简单的操作查询操作。
打开idea并创建一个spring boot项目,选择依赖的时候记得勾选上elasticsearch。项目结构如下:
inidDara存放的是ES数据初始化的代码,repository是存放数据操作的一些接口,比如mapper和repository。这里先简单介绍一下项目的思路,就是项目启动前我会将数据库的一些数据放到elasticsearch,然后用户访问的时候直接从elasticsearch返回数据,而不是我们熟悉的关系型数据库。我这个项目里面elasticsearch更像是一个缓存服务器。
项目配置文件如下:application.properties
项目的pom.xml如下:
创建一个User的实体类,因为等会我们需要将用户信息存放到ES,所以需要添加一个注解:
接下来我们新建一个UserRepository并继承ElasticsearchRepository,对spring boot data熟悉的小伙伴对它提供的CrudRepository应该并不陌生,我这里重写的方法都来自CrudRepository接口。一个是保存用户,一个根据id查询用户
简单说下Optional类,这个类也是java1.8以后才添加的,我的理解就是一个容器类,它可能包含空值也可能不包括空值,这样的好处就是避免了空指针。具体可以看下这个类的源码。
我们需要在项目启动后向ES添加数据,这里我使用的是ApplicationRunner类实现的,代码如下:
然后是UserService
最后是UserController,这里只是先把项目跑起来,所以没有那么多复杂的操作,比如写什么查询语句之类的。
然后启动项目,可以看到控制台输出了elasticsearch相关的内容:
启动成功后在浏览器输入:localhost:8080/user/test/1
可以看到用户的信息已经展示出来了
到这里,项目基本上算是跑通了,但是有点遗憾的是kibana没能在服务器启动,不然可以查看一下ES内的数据,其他的部分还是等自己系统学习了ES后再来补充项目代码吧!
elasticsearch确实功能来说是很强大,可以当搜索引擎,当数据库,另还还有很多的插件,比如图形化的等等。而且它的用处也是越来越广泛,我觉得是非常值得学习的,关键是官方文档有中文,良心啊!!
项目的代码我还上传到我的github,地址:https://github.com/ypcfly/elasticsearch。好了,今天的学习就到这里,最后祝大家中秋节快乐~~~~~
领取专属 10元无门槛券
私享最新 技术干货