敏感词过滤

[TOC]

IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。
官网: https://code.google.com/archive/p/ik-analyzer/
本用例借助 IKAnalyzer 进行分词,通过遍历分词集合进行敏感词过滤。
使用前需对敏感词库进行初始化: SensitiveWordUtil.init(sensitiveWordSet);
分词器底层

1
2
3
4
5
6
7
8
9
10
private static List segment(String text) throws IOException {
List<String> list = new ArrayList<>();
StringReader re = new StringReader(text);
IKSegmenter ik = new IKSegmenter(re, true);
Lexeme lex;
while ((lex = ik.next()) != null) {
list.add(lex.getLexemeText());
}
return list;
}

用户发起点赞、取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储。

设点赞人的 id 为 likedPostId,被点赞人的 id 为 likedUserId ,点赞时状态为 1,取消点赞状态为 0。将点赞人 id 和被点赞人 id 作为键,两个 id 中间用 :: 隔开,点赞状态作为值。

所以如果用户点赞,存储的键为:likedUserId::likedPostId,对应的值为 1 。

取消点赞,存储的键为:likedUserId::likedPostId,对应的值为 0 。

取数据时把键用 :: 切开就得到了两个id,也很方便。

在可视化工具 RDM 中看到的是这样子

数据库表中至少要包含三个字段:被点赞用户id,点赞用户id,点赞状态。再加上主键id,创建时间,修改时间就行了。

建表语句:

1
2
3
4
5
6
7
8
9
10
11
create table `user_like`(
`id` int not null auto_increment,
`liked_user_id` varchar(32) not null comment '被点赞的用户id',
`liked_post_id` varchar(32) not null comment '点赞的用户id',
`status` tinyint(1) default '1' comment '点赞状态,0取消,1点赞',
`create_time` timestamp not null default current_timestamp comment '创建时间',
`update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
primary key(`id`),
INDEX `liked_user_id`(`liked_user_id`),
INDEX `liked_post_id`(`liked_post_id`)
) comment '用户点赞表';

开启定时任务持久化存储到数据库

定时任务 Quartz 很强大,就用它了。