天天书屋——支付宝+Lucene 中文全文索引+Redis 的图书购物商城。(滑稽大作战代码也在其中)

2017-07-03 21:30:57 +08:00
 doggg

又到了期末,免不了一波作业。

PHP 有一份图书购物商城答辩作业。课本做法实在粗糙。我用 JAVA 重新写了一份。

自从上次 demo4 流产后很久没开新 demo 了,借此机会新开一个 demo。

注意:GIF 非常大,手机用户现在跑还来得及

项目地址: http://demo.leeys.top/demo5/

Gayhub: https://github.com/Dog-Lee/demos 欢迎 start 欢迎 fork

另外,滑稽大作战的代码最近整理好了也提交到 Gayhub 仓库,博客在这里。

在线演示:

注册+登录+购买:

后台管理

Lucene 全文搜索

新技术

Lucene:

为什么不用"%keyword%",或者 MySQL5.7 自带的分词索引?后者的理由是精确度不如前者,而前者的理由是不如不用。

我用它用来实现图书的全文索引。它是一款非常高效的 Java 中文全文索引库,是 Java 系公司的必备搜索,像阿里与美团都在使用。Lucene 的 API 在不同的版本差异巨大,官方也没有很好的教程或文档,学习曲线初期非常陡峭。通常我们需要为某个实体对象也就是某一张表做索引以提供全文索引能力,当表一多时,写起来十分痛苦,为了缓解模板尴尬,这里我小造了一个轮子,只需要继承我写的 AbstractLucene 抽象父类,再用重写几个方法,即可为某张表实现全文索引,效果非常棒,具体可以参考 demo5 里的 BookLucene.java 和 UserLucene.java。至于搜索,抽象父类只实现了由 getSearchFields()指定字段的多字段搜索,如果需要自定义搜索,重写父类或者增加方法即可。

大概像这样,很简单吧。

@Component
public class UserLucene extends AbstractLucene<User, String> {
    @Override
    protected void buildIndex() {}
    @Override
    protected Analyzer getAnalyzer() {
        return CHINA_ANALYZER;
    }
    @Override
    protected Document convert(User e) {
        return null;
    }
    @Override
    protected User convert(Document doc) {
        return null;
    }
    @Override
    protected Directory getDirectory() {
        return null;
    }
    @Override
    protected String[] getSearchFields() {
        return null;
    }
    @Override
    public void delete(String id) {
        TermQuery query = new TermQuery(new Term("uuid", id));
        super.delete(query);
    }
    @Override
    public void update(String id, User e) {
        super.update(e, new Term("uuid", id));
    }
}

谢谢大家

3432 次点击
所在节点    分享创造
17 条回复
doggg
2017-07-03 21:45:49 +08:00
不好意思大家,1G 内存的服务器挂了 3 个 Spring Boot 内存上到 70%,加上 8%的 MySQL,刚刚被挤挂了。
doggg
2017-07-04 09:28:12 +08:00
昨晚服务器挂了一个晚上,现在上线了。不好意思 Spring Boot 项目太迟内存了。有熟悉 Spring Boot 内存优化的同学吗?分享一下秘诀。
omygod
2017-07-04 10:40:45 +08:00
所以说,小打小闹还是别用 java 的好
mineqiqi
2017-07-04 11:14:01 +08:00
楼主真的厉害,我大学的时候还在打 dota 呢
doggg
2017-07-04 11:17:39 +08:00
@mineqiqi 都一样的,我前段时间每天除了吃饭睡觉就是打滑稽大作战。![]( )
doggg
2017-07-04 11:21:15 +08:00
@omygod 我对 Java 还是充满着满满的爱呢
claysec
2017-07-04 13:17:14 +08:00
真羡慕能独手开发一套网站应用 demo 的人
doggg
2017-07-04 13:27:16 +08:00
@claysec 可能跟我小时候整天沉迷天真幻想但每次都不能做到有关。
claysec
2017-07-04 13:51:04 +08:00
@doggg 我正准备上大学,不知道楼主是否愿意交流下。顺带吸取下经验:)
claysec
2017-07-04 13:54:15 +08:00
@doggg 卧槽?!楼主广科的?!我报了这个学校!!!
doggg
2017-07-04 13:56:57 +08:00
@claysec 在下不才。你的博客写得非常好,大学努力保持下去应该会变得超级厉害。
doggg
2017-07-04 13:59:12 +08:00
claysec
2017-07-04 14:00:40 +08:00
@doggg 我在新人群。不知道楼主进来没有。进来应该看到我了
doggg
2017-07-04 14:03:07 +08:00
@claysec 我 QQ 上的社交比较少,没有加太多的群。学弟好好努力。大一的生活非常充实与有趣。
claysec
2017-07-04 14:07:06 +08:00
@doggg 别这样学长。难得都快成为校友了。wechat|whatsapp|line|telegram|qq 随你挑一个:)
doggg
2017-07-04 14:08:23 +08:00
大家都知道怎么联系我的。
claysec
2017-07-04 14:11:00 +08:00
@doggg 看来学长掌管着学校的机房。66666

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX