V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
doggg
V2EX  ›  分享创造

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

  •  
  •   doggg ·
    vm-001 · 2017-07-03 21:30:57 +08:00 · 3505 次点击
    这是一个创建于 2708 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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));
        }
    }
    

    谢谢大家

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