(篇章1)学习Elasticsearch之激励计划系统创作

80 阅读3分钟

背景

    俗话说,每到逢年过节,这礼物🎁该如何选择,就成了天大的难题。你说买便宜点吧,又怕对方嫌弃你小气,你说买贵一点
吧,自己口袋又提示你空空。尤其是情侣之间,这种情况尤为突出。当然,礼物🎁嘛,不就图个经济实用。至少在我们男生眼里
算是这个理吧(此处若是美女看到,作者在此🐶狗头保命)。
    所以嘛,这说来说去咱们还是不知道这礼物🎁到底如何选择!怎么办呢?
    来了,它来了,激励计划就这样在我的脑海里生根发芽了。
    正好这段时间,想学习一下Elasticsearch这门技术,于是干脆就画画图,看看资料,为激励计划的创作做前期积累。差
不多应该是积累了2周的时间吧,也可能是3周(我才不会承认因为懒😼)?往后会不定期进行更新,在此小小抱怨一下,原来一
个人做项目真TM累!
    总之,激励计划开始了。。。

项目架构

1.架构图

激励计划架构设计

2.架构选型说明

(1)前端技术框架:Bootstrap

(2)后端技术框架:Springboot

    这里我并不是架构师,也不知道怎么设计系统架构,就是单纯的找找资料,然后自己一顿捣鼓出来的,大家就看看就好,
其实主要还是让大家知道个大概就可以了。由于作者自己从事的主要是后端开发工作,所以前端方面的技术也只限能看懂,能
改而已。所以本系统(激励计划)中采取的并不是主流的前后端分离架构,作者在此表示歉意🙇‍♀️。
    我想大家也看到上方的架构设计图了,那么可能也会疑惑,后端数据存储怎么没用传统的关系型数据库,例如Mysql、
Oracle等。这是因为作者最近跳槽了一波,而新公司的项目中,用到了Elasticsearch这个东东。我以前也只是听说过,
但完全没接触过,听说这个东东挺火🔥的,于是就想着学习一下。而巧就巧在刚好赶上我要创作本系统(激励计划)的时候。
于是我干脆放弃了数据库,使用Elasticsearch作为系统的数据源。

系统功能

1.首页(登录页)

登录.jpeg

2.注册页

注册.jpeg

3.计划页

1001660288690_.pic.jpg 1011660288690_.pic.jpg

(1)计划功能初步设计图

系统流程初步设计

遇到的问题及解决办法

1.term和match搜索匹配不到问题

场景:用户创建计划时,检测该计划信息是否在今日已经创建过?避免出现重复的计划信息。

示例:

@Override
public Boolean checkPlanInfo(String planInfo, String userId) throws Exception {
    String todayTime = CurrentTimeUtil.newCurrentTime(TimeFormatConstant.Y_M_D);
    Query query = new Query.Builder()
            .bool(b -> b
                    .must(s -> s.term(t -> t
                            // 注意:当planInfo字段内容过长时,此处会进行分词匹配,导致搜索不到结果,需要在字段后面添加"keyword"进行不分词搜索
                            .field("planInfo.keyword")
                            .value(planInfo))
                    )
                    .must(s -> s.term(t -> t
                            .field("isFinished")
                            .value(Boolean.FALSE))
                    )
                    .must(s -> s.term(t -> t
                            .field("userId.keyword")
                            .value(userId))
                    )
                    // 注意:此处使用matchPhrase而不使用match的原因在于match匹配会将入参也进行分词匹配,而matchPhrase则直接将入参数当成整体匹配
                    .must(s -> s.matchPhrase(m -> m
                            .field("createTime")
                            .query(todayTime)
                    ))
            ).build();
    List<PlanDTO> planDTOS = planManager.planDocumentsConvertPlanDTO(planDao.getMultiplePlanByQuery(query));
    return CollectionUtils.isEmpty(planDTOS) ? Boolean.FALSE : Boolean.TRUE;
}

总结

1.小结

    系统在这里算是初步启动了,对于经验尚浅的我来说,行动起来,尽管做的很粗糙,但我也很是满足了,毕竟我已经行动
起来了。后面我会抽时间持续更新系统的。文章下面附上了项目源码地址,以及我部署的一个小Demo,大家感兴趣的话可以上去
看看👀。当然,如果您可以移步本系统(激励计划)的源码地址,看看作者的创作,并顺便给作者一个star👍的话,那就更好
了,感谢大家的阅读,谢谢大家🙏,我们下一篇文章再见👋。

2.与本系统(激励计划)相关

(1)源码地址:

激励计划github仓库地址

(2)项目演示地址:

激励计划Demo地址