又到了期末,免不了一波作业。
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));
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.