第六章(nk)

2020-02-10  本文已影响0人  全麦土司
image.png

6.1 ES入门

image.png

要使用ES进行搜索,数据需要在ES里面再存储一份。
可以将其是一种特殊的数据库。

索引,类型,文档,字段分别对应于数据库中的库,表,行,列。
一行数据一般采用json的格式,json里面的每一个属性是一个字段。
但是在ES6.0之后,一些概念发生了变化。一个索引表示一张表,类型逐渐被废弃。索引表示一张表,文档表示一行数据,字段表示一列数据。但是后面的内容还会用到类型概念,所以稍作提示。

和集群有关的概念:
多个服务器组合在一起叫做集群,其中的每一台叫做节点。分片是指将索引拆成多个分片进行存储。因为索引里面的内容可能会比较大,也就是表可能会比较大。拆分之后,有利于并发地进行操作。副本是对分片的备份,一个分片可能包括多个副本。

---- 查看文档


image.png

---下载产品


image.png

不下载最新的文件,因为springboot的pom.xml的父pom文件中规定的ES版本是6.4。

image.png

下载的是ES6.4.3,然后修改配置


image.png image.png

集群的名字:


image.png image.png

往ES中存的数据存到了哪里:


image.png image.png

运行日志的存放地:


image.png image.png

--接着配置环境变量


image.png image.png

ES配置好之后需要安装一个中分分词插件。
默认支持英文。


image.png

安装路径是固定的:


image.png image.png

config目录下面是一些词典,这些词典提供了可以帮助进行分词,如果想扩展词典,可以使用下面1所指的位置。自定义新词和停止词。


image.png

postman模拟web客户端提交数据给服务器。不用写很长的命令,比较方便。

查看服务器集群的健康状况:


image.png

查看集群中有多少个节点:
?v表示带标题


image.png

查看索引:


image.png

创建索引:
创建好的索引叫做test。


image.png

再次查询,发现它的健康状况是
yellow,也就是不太健康,因为我们没有对其进行分片或者备份。

image.png

删除索引,这里的DELETE是指http请求。


image.png

再查一下,没了


image.png

---- 使用postMan进行演示:

image.png

新建一个:


image.png

删除:


image.png

它的目录索引会自动创建文件。


image.png

查询这个索引之下id=1的数据:


image.png

如果修改数据,直接俄修改body,然后再次进行提交即可。
删除:


image.png

找不到了,确实是删除了。


image.png

以上是如何将数据weihudaoes服务器中,但是重点是在于如何进行查询。
存入词条:


image.png

第二条:


image.png
第三条:
image.png

检查一下是不是真的存进去了。


image.png

查询,会查询到三条数据。


image.png image.png

查询content中带有运营实习的词条。


image.png

运营实习并没有完全匹配,但是首先会进行分词匹配。


image.png

查询的比较多:


image.png

结果查询到了三条。

6.4 spring整合ES

image.png

我们将数据库中的帖子放在ES服务器中,然后对帖子进行搜索。
导包:


image.png

我们可以将版本删除掉

配置:
9200是http进行访问的端口。
9300是tcp端口
但是,Redis和ES在底层都依赖于Netty,他们对Netty的启动是有冲突的,需要解决一下。


image.png image.png image.png
image.png

接下来要做的事情,将数据库中的全部帖子存到ES服务器中,然后对服务器进行帖子的搜索。

Repository比较简单,先使用这个,如果不能满足需求,我们再考虑使用其他的。
首先需要进行配置,说明一下实体存储在ES服务器的哪个位置。
spring整合的ES会在访问ES服务器的时候自动将实体数据和ES服务器里面的索引进行映射。一个实体映射到哪个索引,类型,分片和副本,都是通过注解进行设置的,如下所示:


image.png

如果没有,会自动创建。

随便配置:


image.png

a和b是两个分词器的名称:这是给词条加上注解。


image.png

存储数据的时候采用的是细粒度的分词器,但是搜索的时候使用的粗粒度的分词器。

对于可以被搜搜索的字段都采用这样的方式就可以。

image.png image.png

实体类配置完成,有了这个配置,spring底层才能帮助我们生成具体的实现类。

--- 接下来定义repository接口
单独建立一个子包。


image.png

这些接口里相当于是数据访问层的代码,下图中a表示我们要处理的实体类,B表示实体类中的主键。


image.png

这样之后就可以直接使用了。艾玛

目前并没有discussPost,一会儿看看执行了这个方法之后会不会有discussPOsit这个索引。

插入数据:


image.png

不用特意创建索引,如果发现没有,它会自动创建。
再次查询会发现有两个。


image.png

查询到了三条数据:


image.png

---- 插入多条数据

image.png

多条数据
删除索引里面的全部数据


image.png image.png image.png

ES的结果是两部分,原始匹配的结果,还有高亮部分。需要将高亮数据整合到原始数据中。

image.png

需要利用这个Mapper进行处理。

解决办法,直接利用template的方法:
这是新的方法


image.png

接下来就是将命中的数据hit保存到实体中。
SearchHit是一个map,是将json数据封装成为了map。

我们先获得原始的内容进行赋值,然后再使用高亮的内容进行覆盖。这样比较合理。


image.png

ES存日期的时候将其转换成为了long类型的字符串。


image.png image.png

这也忒麻烦了


image.png image.png

返回的内容是局部。

6.6 开发社区搜索功能

image.png

功能须知:发帖即存贴,删帖也删除服务器中的内容。

增加评论的时候,帖子的评论数量会增加。


image.png

这里的异步是指使用消息队列的方式。

要加上主键,主键才会被加入到这个实体类中。


image.png image.png image.png

注意了,这里的current是指从0开始。


image.png image.png

这个地儿老师说的不对吧,他说这里的entityUserId获取比较复杂,我觉得一点也不啊,不就是帖子的作者也就是自己吗??

image.png image.png

当我们添加了评论的时候,帖子的评论数量也会增加,因此需要重新进行存储。只有对帖子的评论才会进行存储。


image.png

现在事件已经被触发了,我们接下来要找到事件的消费者。

image.png

接下来是进行内容的展现。
为啥这里不能使用Post请求??
get请求得到参数有两种方法

  1. 使用路径中的某一级
  2. 使用路径中拼上?
image.png

聚合数据:
注意其声明list和Map的位置。

image.png

图中的1是为了在页面上显示出来搜索的关键字,2是严谨。


image.png

---- 最后是html的处理
文本框的值需要提交给后台,所以得加上name属性。
index的设置:


image.png

search.html的处理:


image.png image.png

启动服务之前,确保kafka和es是已经启动了的,kafka依赖于zookeeper(一个管理集群的工具)。

没有登陆的时候也可以利用其进行搜索。


image.png

接着,发布帖子,看看能不能立刻检索到


image.png

补上一个内联样式:
不然查到的结果头像非常大。


image.png image.png

一些小问题:

  1. 搜索框可以是post吗??

  2. 为什么有时候使用异步请求,什么可以使用,什么不可以使用,标准是啥。

  3. 像下面这里的写法,我觉得直接进行存储不就完事儿了呗,谁谁执行就存谁的,为啥要把这个过程分成两个,系统通知那个还可以理解,因为主题比较多,可以进行扩展。


    image.png
  4. 这是直接通过路径得到的,可以直接得到,只要名字是一样的。


    image.png
  5. 图片.png

    这里一定要写成utext,我之前写的text一直于出现了很多 这种形式,而且<em>也没有转成对应的样式。

上一篇 下一篇

猜你喜欢

热点阅读