Lucene是一个开源的,搜索引擎软件工具包。
这个开源的库,如果我们想要直接用,我们就必须,自己写代码,来调用它里面的API,是比较麻烦的。
ES相当于,是对Lucene的一层封装,并且ES提供Restful API的接口。
我们可以直接发送请求的方式,就可以操作ES。
大型网站:维基百科、stackoverflow、github都是用es的。
连接上我们的虚拟机。
es是用java写的,默认初始会占用2个G的堆内存空间。
我的虚拟机内存空间不够的。
我们可以加上一个-e
的命令,来限制它的堆内存空间使用,要不然,可能会启动报错的。
更加详细的信息,可以参照官方的文档。
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 [IMAGE ID]
es默认使用的端口是9200的,当分布式的情况下,es各个节点之前的通信,使用的是9300的端口,我们也暴露出来。
表示安装成功了。
学习es的,最好的资料,就是官方文档。
json有天然的,轻量级,和,跨平台的优势。
我们一个json文档,就代表,一个数据对象。
索引 | 数据库 |
---|---|
类型 | 表 |
文档 | 记录、行 |
属性 | 字段 |
宫睿这个女人,只有身材是不错的。
我们保存文档到ES当中::
同样的方式,我们存进去3个员工。
这个时候,ES就能够帮我们分析和搜索这些数据了。
如果发送DELETE请求,这是删除员工的。
如果发送HEAD请求,这是检查,是不是有这个员工的。
这就是,使用rest风格请求,对es数据,进行增删改查。
post请求,是用来,使用查询表达式,搜索的哦。
这个就是短语完全匹配的意思。全文检索的时候,有任何一个单词都行的。像是上面的例子当中,rock clibing。
其实,就是在玩这些查询表达式。
选择web模块,是为了方便测试。
springboot是默认使用spring data模块来操作elasticsearch。
这是spring data对es的自动配置部分。
这是jest,是非常流行的es客户端工具,是用http的方式,和es进行交互的。
到底哪种技术是默认生效的呢?
这个自动配置文件做了什么呢?
给IOC容器中注入了一个elasticsearchClient。
我们客户端上,需要配置ClusterNodes这个信息。
包括ClusterNames这个信息。
在这里,帮我们往IOC容器当中,配置了一个:ElasticsearchTemplate。
到这里,基本上,我们也回过味来了。
JdbcTemplate,RedisTemplate,RabbitTemplate,ElasticsearchTemplate。
这说明springboot,喜欢,在整合别人的时候,注入一个XXXTemplate的东西。
这个ElasticsearchRepositoriesAutoConfiguration的作用,就是启用了ElasticsearchRepository接口,这个,就类似JPA的那种编程方式一样的。我们可以写一个接口,来继承这个ElasticsearchRepository,我们的接口,就会有相应的方法了。
接下来,我们是分别测试,用这两种方式,来操作es。
我们先在pom文件当中,将spring-boot-starter-data-elasticsearch来注释掉。
我们查看一下jest的自动配置类,有没有生效的。
我们从jestAutoConfiguration当中,找到JestProperties,然后进入去看看:
这里面,展示了,哪些东西,是我们可以在application.properties当中配置的。
启动一下,然后从浏览器当中,查询一下,就得到了,下面的结果:
然后,我们启动了这个程序,我们从控制台中,看到了,它搜索出来了,内容当中携带hello的内容了。
JestClient的基本的操作,就是,上面的两个演示的内容。
更多的,详细的功能,我们可以参考github上面,这个项目的,官方文档。
来学习,其他的,高级的,一些东西。
我们把原来,我们在测试jest的时候,关闭的,spring-data相关的依赖内容,重新打开。
就是如上图,所示的内容。
要在application.properties当中,配置节点的名字的哦。
我们es的节点的相关的信息,可以参考下面的内容:
我们的配置信息,是如下所示的:
如果,我们只是修改了pom文件,只是配置了上面的两个东西。然后启动项目,可能是会,出现下面的报错的:
因为节点之间的通信,是使用9300端口的,但是,我们在启动项目的时候,居然是报了上面的错误的。
这个是为什么原因呢?
这主要是因为项目当中,使用的es是2.4.6的版本:
而,我们启动的es的版本是5.6.9的版本哦。
这个,也就是说,springdata的es版本,有可能是,不合适的。
我们需要找到一个合适的,spring data版本才可以。
我们接下来,参考一下官方文档。
根据上面的,spring data官方文档,我们可以知道,这个版本都是对应于es的2.x版本的。
现在,我们有两种办法,来解决,这个版本适配的问题。
第一种方法,我们升级spring boot的版本,我们使用更高版本的spring boot版本,这样我们的spring data的版本就会更高,我们的spring data elasticsearch的版本,就会更高的。这样,就解决了这个问题了。
第二种方法,我们需要安装一个,2.x版本的es的。
安装成功。
这里,显示启动成功.
那么,我们做了,这么多的目的,就是为了测试,使用spring data es模块,来操作es的。
现在,我们应该怎么做呢?
我们应该是有两种用法的。
可以参考官方文档:https://github.com/spring-projects/spring-data-elasticsearch
第一种,是编写ElasticsearchRepository的子接口。
第二种,是使用ElasticsearchTemplate来操作es。
第一步,先写个接口。
第二步,我们的这个接口,是需要继承extends ElasticsearchRepository的,这个接口是,有两个泛型的。
第一个泛型,是我们要存储的数据的类型,第二个范晓萱,是主键ID的泛型。
第三步:我们写一个bean吧。
我们的子接口,写好了之后。
这个子接口,就具备了,ElasticsearchRepository当中的,方法了。
我们的bean上面,要加上es相关的注解哦:
这里面是测试,给ES当中保存数据:
我们查询一下,得到的结果,是这样的:
这是证明,已经存储进去了。
在这个接口,当中,有好多好多的方法的。
这个,也支持,自定义的方法的。
这里,只写了个接口,也没有写什么接口的实现,这玩意,就能用了吗?
我们发现,确实是查询成功了:
为什么会出现这么神奇的效果呢?
在官方文档当中,对查询方法,怎么命名,对应怎么样的query string,有一一的对比说明哦:
如果你自定义了一个方法,也支持用@Query注解,将查询表达式,标注在一个方法上面的:
在官方文档中,是有这个东西的: