1、lucene初始化

//    @Value("${lucene.index.path}")
private String indexPath = "/Users/vitoyan/Downloads/Projects/jeesite-demo/lucene_index"; private Directory directory; private DirectoryReader reader; @PostConstruct
public void init() {
try {
directory = FSDirectory.open(Paths.get(indexPath));
} catch (IOException e) {
e.printStackTrace();
}
}

2、添加索引

/**
* 添加索引
*
* @param article
* @throws Exception
*/
public void add(JsCmsArticlesEntity article) throws GlobalException {
IndexWriter writer = null;
try {
Analyzer analyzer = new ComplexAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
writer = new IndexWriter(directory, iwc);
Document doc = new Document();
doc.add(new TextField("id", String.valueOf(article.getId()), Field.Store.YES));
doc.add(new TextField("title", article.getTitle(), Field.Store.YES));
doc.add(new TextField("authorId", String.valueOf(article.getAuthorId()), Field.Store.YES));
doc.add(new TextField("content", article.getContent(), Field.Store.YES));
doc.add(new TextField("tags", article.getTags(), Field.Store.YES));
doc.add(new TextField("createAt", DateUtil.formateToStr(article.getCreateAt(), "yyyy-MM-dd"), Field.Store.YES));
writer.addDocument(doc);
} catch (Exception e) {
throw new GlobalException(500, e.toString());
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

3、查询数据

/**
* 查询数据
*
* @param keyword
* @return
*/
public List<JsCmsArticlesEntity> query(String keyword) throws GlobalException {
System.out.println(keyword);
try {
IndexSearcher searcher = this.getIndexSearcher();
Analyzer analyzer = new ComplexAnalyzer(); String[] fields = {"title"};// 使用多域查询,便于以后扩展
MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(fields, analyzer);
Query query = multiFieldQueryParser.parse(keyword); TopDocs topDocs = searcher.search(query, 100); // 1.格式化对象,设置前缀和后缀
Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
// 2.关键词对象
Scorer scorer = new QueryScorer(query);
// 3. 高亮对象
Highlighter highlighter = new Highlighter(formatter, scorer); List<JsCmsArticlesEntity> list = new ArrayList<>();
JsCmsArticlesEntity article;
ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
// if (Integer.parseInt(document.get("authorId")) == 1) {
article = new JsCmsArticlesEntity();
String titleHighLight = highlighter.getBestFragment(analyzer,"title",document.get("title"));
article.setId(Integer.parseInt(document.get("id")));
article.setTitle(titleHighLight);
article.setContent(document.get("content"));
article.setTags(document.get("tags"));
// article.setCreateAt((Timestamp) DateUtil.parseToDate(document.get("createAt"), "yyyy-MM-dd"));
list.add(article);
// }
}
return list;
} catch (Exception e) {
throw new GlobalException(500, e.toString());
}
} @Test
public void test() {
LuceneService luceneService = new LuceneService();
luceneService.init();
luceneService.query("123"); } private IndexSearcher getIndexSearcher() throws IOException {
if (reader == null) {
reader = DirectoryReader.open(directory);
} else {
DirectoryReader changeReader = DirectoryReader.openIfChanged(reader);
if (changeReader != null) {
reader.close();
reader = changeReader;
}
}
return new IndexSearcher(reader);
}

4、使用lucene(相关工具类和全局异常代码可以查看码云

在发布文章时添加文章索引到文件系统

luceneService.init();
luceneService.add(article);

或者一次添加所有索引

List<JsCmsArticlesEntity> articles = this.frontService.getAllArticles();
LuceneService luceneService = new LuceneService();
for (JsCmsArticlesEntity article : articles) {
luceneService.init();
luceneService.add(article);
System.out.println(article.getTitle());
}

然后查询数据

LuceneService luceneService = new LuceneService();
luceneService.init();
resp.setRespCode(JsCmsResponse.RESPCODE_SUCCESS);
resp.setMsgInfo("获取内容成功");
resp.setRespObj(luceneService.query(keyword));
												

基于jeesite的cms系统(六):Lucene全文搜索引擎的更多相关文章

  1. 基于jeesite的cms系统(一):开发环境搭建

    基于jeesite的cms系统系列,是对基于jeesite进行二次开发的博客模块开发过程的总结.涉及入门安装,二次开发,部署等 一.概况: JeeSite 是一个 Java 企业级快速开发平台,基于经 ...

  2. 基于jeesite的cms系统(三):使用RESTful API在前端渲染数据

    使用RESTful API可以更好的开发前后分离的应用,后面一节会介绍使用模版引擎Beetl开发后端渲染的应用. 一.配置Swagger(Api 接口文档) 1.使用系统自带 拷贝jeesite-mo ...

  3. 基于jeesite的cms系统(五):wangEditor富文本编辑器

    一.关于wangEditor: wangEditor —— 轻量级 web 富文本编辑器,配置方便,使用简单.支持 IE10+ 浏览器. 官网:www.wangEditor.com 文档:www.ka ...

  4. 基于jeesite的cms系统(四):使用Beetl模版引擎在后端渲染数据

    一.Beetl简介 1. 什么是Beetl Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验. ...

  5. 基于jeesite的cms系统(二):整体设计

    一.菜单设计 在系统管理-菜单管理中可以设置内容管理菜单(自动生成) 注意:归属模块应属于核心模块core.如果新加的的菜单设置为内容管理模块cms,系统下次重启时会重置本次设置,具体原因不详. 二. ...

  6. 基于jeesite的cms系统(七):GlobalException全局异常和部署

    关于全局异常: 在业务代码中专注处理业务,而不是返回各种CodeMsg(比如这里只需要知道登录时成功还是失败,其余情况直接抛出异常),可以直接抛出异常,添加一个全局异常类,根据CodeMsg来生成异常 ...

  7. 基于Java的开源CMS系统选择(转)

    CMS概述 对于网站CMS系统而言,基于PHP的是主流,如Drupal/Joomla在各个主流虚拟机提供商上都是标准配置,也被广泛使用. 但如果你拥有Java团队,或者项目目标是想建立一个企业网使用的 ...

  8. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  9. 基于Java的开源CMS系统选择

    CMS概述 对于网站CMS系统而言,基于PHP的是主流,如Drupal/Joomla在各个主流虚拟机提供商上都是标准配置,也被广泛使用. 但如果你拥有Java团队,或者项目目标是想建立一个企业网使用的 ...

随机推荐

  1. django xadmin 1不在可用的选项中

    报错:1不在可用的选项中 解决办法: 对CharField的choices的选项, gender = models.CharField(max_length=, choices=((, , " ...

  2. 使用Server Trigger保护重要的数据库对象

    一 .Server Trigger的简单介绍 在SQL Server数据库中,Server Trigger 是一种特殊类型的存储过程,它可以对特定表.视图或存储中的必然事件自动响应,不由用户调用.创建 ...

  3. c/c++ 模板函数的重载

    模板函数的重载 普通函数可以重载,模板函数也可以重载,但规则复杂 有下面2个函数,名字相同,返回值相同就,参数不同,符合重载. template<typename T> std::stri ...

  4. Redis 由浅入深

    1.redis是什么? redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中) 使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现 ...

  5. SQL 表值函数/标量函数

    表值函数 定义表值函数 --定义表值函数 CREATE FUNCTION GetStuScore(@Stu_ID INT ) RETURNS TABLE AS RETURN (SELECT ),[St ...

  6. IDEA快捷建使用

    因为以前使用的IDE工具是Eclipse,所以在公司中都是用IDEA的情况下,换成了IDEA,感觉是好用了很多. 其他快捷键: Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表 ...

  7. MySQL工作原理

    Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的.  mysql原理图各个组件说明: 1. connectors 与其他编程语言中的sql 语句进行交互,如php.java等. 2. M ...

  8. ccpc杭州站 赛后总结

    Ccpc杭州站赛后总结 2017年11月4号五号,我参加了ccpc杭州站的比赛,我的队友是聂少飞和王艳,在4号一点半,举行了比赛开幕式,听着教练代表的发言,听着参赛选手代表的发言,听着志愿者的发言,都 ...

  9. 企业推动移动化战略中为什么需要Moli?

    随着科技的进步,计算能力程指数上升,引爆人工智能的大发展,人类社会开始步进入智能时代.与此同时,端能力将演进到第三代,全面参与智能边缘计算,从PC互联到移动互联到万物互联,历史在快速演进:主流技术向物 ...

  10. 微信内分享第三方H5链接无法使用内置浏览器打开的解决方案

    很多朋友在微信内想分享转发H5链接的时候都会很容易碰到H5链接在微信内无法打开或在微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢, ...