项目笔记6-开发社区搜索功能

Elasticsearch入门

Elasticsearch简介

数据在在搜索引擎中存一份进行分词索引然后搜索
es在提交和分词都很快。目前最流行的搜索引擎
术语:
索引:相当于mysql的database
类型:相当于mysql表*/85
文档:相当于mysql一行数据,通常是json
字段:json的每个属性就是字段,相当于mysql的列
es6.0以后发生变化想要废弃类型这个概念。6.0以后索引对应一张表。保留了类型但是固定成一个单词,7.0就废弃掉了。
节点:一台服务器
分片:对索引进一步划分,拆分成多个空间存。提高并发能力,
副本:分片的备份。

  1. 下载elasticsearch需要查看自己项目依赖的paraent支持的es版本,我的是6.8.6。
  2. 配置elasticsearch.yml
cluster.name:nowcoder //集群名字
path.data:/work/data/elasticsearch-6.8.6/data       //数据存放位置
path.logs:/work/data/elasticsearch-6.8.6/logs
  1. 配置环境变量:/bin目录
  2. 装一个中文分词插件。github上找elasticsearch-analysis-ik项目下载对应es的版本
    新词配置:在IKAnalyzer.cfg.xml,配置新的新词内容,停止词:分词看到这个词,词条就停止了,基本不用配。
  3. 安装postman:模拟网页发送http请求
    提高使用体验用这个入门工具比较好
  4. 命令
    命令行访问es,默认占用9200端口
./elasticsearch.sh

查看集群健康状况 v表示显示标题

crl -X GET "localhost:9200/_cat/health?v"
image.png

green就是健康
查看集群节点

cur -X GET "localhost:9200/_cat/nodes?v"

堆内存占用量,cpu占用量,节点角色等等


image.png
cur _X PUT "localhost:9200/test" //创建索引
cur -X GET "localhost:9200/_cat/indices?v"

创建的索引是yellow表示不是健康的状态,应为没有创建分片,副本啥的,


image.png

删除节点

cur _X DELETE "localhost:9200/_cat/indices?v" //删除

再次查询则无节点
使用postman
一样可以执行上面的命令,
插入数据,用put请求,指定不存在的索引会自动创建,6.0 _doc就是占个位置,没有实际作用, 后面是id

localhost:9200/test/_doc/1

putgetdelete es的索引 数据
搜索数据


image.png

image.png

能够对你提供的搜索条件分词。搜索出来的内容包括实习和运营
复杂搜索条件通过请求体实现


image.png

复杂的从手册里看

Spring整合es

  • 引入依赖
    spring-boot-starter-data-elasticsearch
  • 配置Elasticsearch
    cluster-name、cluster-nodes 集群名字和节点
  • Spring Data Elasticsearch
    ElasticsearchTemplate //模板方式
    ElasticsearchRepository //接口方式
  1. 配置文件
    clustername是之前修改过的名字
    9200 是http端口,9300是tcp端口


    image.png
  2. es,redis底层基于netty,二者在启用netty会出现冲突
    搜索NettyRuntime
    image.png

    如果现在直接启动就会报重复的错误,就会不启动了。是由于es调用导致的错误,在Netty4Util这个类是es底层封装的类,底层调用了setAvailableProcessors,这样底层就会报错,因为不为0,
    image.png

    这里是个开关,如果为false则不执行后面的代码也就不会报错。所以我们在启用之前要设置为false
    image.png
image.png
  1. 针对帖子操作,所以需要帖子实体类数据
    @Document
    indexName:索引名字
    type:类型,写成固定的_doc
    shards:分片 6
    replicas: 副本 3
    通过这把实体映射。副本分片等都在这配置
    @Id:存到id字段中
    @Field 普通字段, type=FieldType.Integer
    analyzer="ik_max_word" 存储时解析器,要用详细的分析器,拆解完全,在config中找这个配置器,searchAnalyzer="ik_smart"搜索时解析器。搜索时没必要用这样复杂的分析器,拆分较少词汇,满足需求。用聪明的方式猜出意图搜索。
    下面示例,如果需要用来搜索的需要指定存储解析器和搜索解析器。


    image.png

    这是后续的内容


    image.png
  2. 定义Repository放到dao下的子包elasticsearch
    DiscussPostRepository继承ElasticsearchRepository<DiscussPost, Integer>
    前面是指定实体类,后面Integer是指定实体类的主键类型
    该接口就实现了增删改插的方法
  3. 定义测试类
    没有索引会自动创建
    save() 插入单条数据,如果原来有数据则会覆盖掉原来数据
    saveAll()插入多条数据
    deleteById()删除对应id的数据
    deleteAl()会把所有数据删了
    搜索功能
    把匹配到的关键词高亮,实际是把匹配内容加标签,我们在页面定义css,则可以高亮。
    把搜索的要求如分页等构造进去,我们需要SearchQuery
    type是置顶优先排序,然后是score,代表热度,最后是时间。按照这几个排序,然后指定分页规则,以及高亮方式。
    Page实现了Iterable接口所以可以直接foreach遍历出数据。
    image.png

    上面的search方法底层调用了elasticTemplate.queryForPage(searchQuery, class, SearchResultMapper)方法查的数据,class是实体,通过resultMapper返回,但是这个结果返回是原始数据,没有对高亮的数据封装。所以用elasticTemplate来做数据查询返回,并把高亮数据封装。
    最后得到的数据内容变少了,所以只会匹配一段内容,而不是所有内容。

开发社区搜索功能

image.png

1.创建ElasticsearchService

  1. discussPostController发帖子要设置消息通知,
    CommentController评论给帖子的时候再触发发帖事件。
    因为评论帖子要修改评论数量。
  2. 消费通知增加消费帖子发布事件。
  3. 新建SearchController
    5.处理页面
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容