美文网首页
第六章(nk)

第六章(nk)

作者: 全麦土司 | 来源:发表于2020-02-10 15:34 被阅读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客户端提交数据给服务器。不用写很长的命令,比较方便。

    • 接下来开始运行
      双击elasticSearch.bat开始启动。
      有这个提示的时候就说明可以了。


      image.png

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


    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

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

    • 测试
      先查看当前服务器中有多少个索引:有一个


      image.png

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

    插入数据:


    image.png

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


    image.png

    查询到了三条数据:


    image.png

    ---- 插入多条数据

    image.png
    • 修改数据
      关注于id= 231的这条数据


      image.png

      修改其实就是覆盖


      image.png
    • 删除:
      一条数据


      image.png

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


    image.png
    • 搜索
      构造搜索条件,返回结果设置等都可以进行设置。
      ES能对匹配到的词前后加上标签。我们只需要给标签加上css样式。
      关键词
      排序方式
      分页
      高亮等一系列设置;
      NativeSearchQueryBuilder能够构建一个NativeSearchQuery,也就是接口的实现类。【建造者模式】
      withQuery是用来构建搜索条件的。里面需要另一个对象。里面设置搜索词条以及搜索字段。
      然后是排序条件:
      不可能将所有的结果都进行展示,因此还得设置分页条件


      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>也没有转成对应的样式。

    相关文章

      网友评论

          本文标题:第六章(nk)

          本文链接:https://www.haomeiwen.com/subject/yujnxhtx.html