From de5ca49409f4713ed1b863e6a346269a780bfa02 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Tue, 13 Apr 2021 18:58:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E9=97=AE=E7=AD=94=E7=9B=B8?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/MyApplicationRunner.java | 19 ++ .../SysNutritionQuestionController.java | 103 ++++++ stdiet-custom/pom.xml | 32 ++ .../custom/domain/SysNutritionQuestion.java | 43 +++ .../response/NutritionQuestionResponse.java | 27 ++ .../mapper/SysNutritionQuestionMapper.java | 67 ++++ .../service/ISysNutritionQuestionService.java | 70 ++++ .../impl/SysNutritionQuestionServiceImpl.java | 154 +++++++++ .../stdiet/custom/utils/LuceneIndexUtils.java | 319 ++++++++++++++++++ .../custom/SysNutritionQuestionMapper.xml | 114 +++++++ 10 files changed, 948 insertions(+) create mode 100644 stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionQuestionController.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionQuestion.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionQuestionResponse.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionQuestionMapper.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionQuestionService.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionQuestionServiceImpl.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/utils/LuceneIndexUtils.java create mode 100644 stdiet-custom/src/main/resources/mapper/custom/SysNutritionQuestionMapper.xml diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java index 07d68a7d6..80cf64e05 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/MyApplicationRunner.java @@ -2,11 +2,19 @@ package com.stdiet.web.controller; import com.stdiet.common.config.AliyunOSSConfig; import com.stdiet.common.utils.oss.AliyunOSSUtils; +import com.stdiet.custom.domain.SysNutritionQuestion; import com.stdiet.custom.domain.SysWxUserInfo; import com.stdiet.custom.domain.SysWxUserLog; import com.stdiet.custom.mapper.SysCustomerPhysicalSignsMapper; +import com.stdiet.custom.mapper.SysNutritionQuestionMapper; import com.stdiet.custom.mapper.SysWxUserInfoMapper; import com.stdiet.custom.mapper.SysWxUserLogMapper; +import com.stdiet.custom.service.ISysNutritionQuestionService; +import com.stdiet.custom.utils.LuceneIndexUtils; +import com.stdiet.framework.web.domain.server.Sys; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.TextField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -26,9 +34,20 @@ public class MyApplicationRunner implements ApplicationRunner { @Autowired private SysWxUserInfoMapper sysWxUserInfoMapper; + @Autowired + private ISysNutritionQuestionService sysNutritionQuestionService; + @Override public void run(ApplicationArguments args) throws Exception { System.out.println("项目启动调用方法"); + + /*SysNutritionQuestion sysNutritionQuestion = new SysNutritionQuestion(); + sysNutritionQuestion.setTitle("如何防止猝死"); + sysNutritionQuestion.setContent("少熬夜,少暴饮暴食"); + sysNutritionQuestion.setKey("猝死"); + sysNutritionQuestionService.insertSysNutritionQuestion(sysNutritionQuestion);*/ + + } diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionQuestionController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionQuestionController.java new file mode 100644 index 000000000..a160e8893 --- /dev/null +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysNutritionQuestionController.java @@ -0,0 +1,103 @@ +package com.stdiet.custom.controller; + +import java.util.List; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.stdiet.common.annotation.Log; +import com.stdiet.common.core.controller.BaseController; +import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.enums.BusinessType; +import com.stdiet.custom.domain.SysNutritionQuestion; +import com.stdiet.custom.service.ISysNutritionQuestionService; +import com.stdiet.common.utils.poi.ExcelUtil; +import com.stdiet.common.core.page.TableDataInfo; + +/** + * 营养知识小问答Controller + * + * @author xzj + * @date 2021-04-13 + */ +@RestController +@RequestMapping("/custom/nutritionQuestion") +public class SysNutritionQuestionController extends BaseController +{ + @Autowired + private ISysNutritionQuestionService sysNutritionQuestionService; + + /** + * 查询营养知识小问答列表 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:list')") + @GetMapping("/list") + public TableDataInfo list(SysNutritionQuestion sysNutritionQuestion) + { + startPage(); + List list = sysNutritionQuestionService.selectSysNutritionQuestionList(sysNutritionQuestion); + return getDataTable(list); + } + + /** + * 导出营养知识小问答列表 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:export')") + @Log(title = "营养知识小问答", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysNutritionQuestion sysNutritionQuestion) + { + List list = sysNutritionQuestionService.selectSysNutritionQuestionList(sysNutritionQuestion); + ExcelUtil util = new ExcelUtil(SysNutritionQuestion.class); + return util.exportExcel(list, "nutritionQuestion"); + } + + /** + * 获取营养知识小问答详细信息 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(sysNutritionQuestionService.selectSysNutritionQuestionById(id)); + } + + /** + * 新增营养知识小问答 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:add')") + @Log(title = "营养知识小问答", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysNutritionQuestion sysNutritionQuestion) + { + return toAjax(sysNutritionQuestionService.insertSysNutritionQuestion(sysNutritionQuestion)); + } + + /** + * 修改营养知识小问答 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:edit')") + @Log(title = "营养知识小问答", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysNutritionQuestion sysNutritionQuestion) + { + return toAjax(sysNutritionQuestionService.updateSysNutritionQuestion(sysNutritionQuestion)); + } + + /** + * 删除营养知识小问答 + */ + @PreAuthorize("@ss.hasPermi('custom:nutritionQuestion:remove')") + @Log(title = "营养知识小问答", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysNutritionQuestionService.deleteSysNutritionQuestionByIds(ids)); + } +} \ No newline at end of file diff --git a/stdiet-custom/pom.xml b/stdiet-custom/pom.xml index 10f4c64c9..5db28a2cc 100644 --- a/stdiet-custom/pom.xml +++ b/stdiet-custom/pom.xml @@ -68,5 +68,37 @@ lombok + + + org.apache.lucene + lucene-core + 4.4.0 + + + + org.apache.lucene + lucene-queryparser + 4.4.0 + + + + org.apache.lucene + lucene-analyzers-common + 4.4.0 + + + + org.apache.lucene + lucene-highlighter + 4.4.0 + + + + + com.janeluo + ikanalyzer + 2012_u6 + + \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionQuestion.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionQuestion.java new file mode 100644 index 000000000..3b1d20905 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysNutritionQuestion.java @@ -0,0 +1,43 @@ +package com.stdiet.custom.domain; + +import com.stdiet.common.annotation.Excel; +import com.stdiet.common.core.domain.BaseEntity; +import lombok.Data; + +/** + * 营养知识小问答对象 sys_nutrition_question + * + * @author xzj + * @date 2021-04-13 + */ +@Data +public class SysNutritionQuestion extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 标题 */ + @Excel(name = "标题") + private String title; + + /** 内容 */ + @Excel(name = "内容") + private String content; + + /** 关键词,逗号隔开 */ + @Excel(name = "关键词,逗号隔开") + private String key; + + /** 标题内容索引分词之后的关键词 */ + @Excel(name = "标题内容索引分词之后的关键词") + private String titleContentIndex; + + /** 是否在小程序显示,0 不显示 1显示,默认0 */ + @Excel(name = "是否在小程序显示,0 不显示 1显示,默认0") + private Integer showFlag; + + /** 删除标识 0未删除 1已删除 */ + private Integer delFlag; +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionQuestionResponse.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionQuestionResponse.java new file mode 100644 index 000000000..620e75864 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionQuestionResponse.java @@ -0,0 +1,27 @@ +package com.stdiet.custom.dto.response; + +import com.stdiet.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class NutritionQuestionResponse implements Serializable { + + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 标题 */ + @Excel(name = "标题") + private String title; + + /** 内容 */ + @Excel(name = "内容") + private String content; + + /** 关键词,逗号隔开 */ + @Excel(name = "关键词,逗号隔开") + private String key; +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionQuestionMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionQuestionMapper.java new file mode 100644 index 000000000..21bae7cdc --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysNutritionQuestionMapper.java @@ -0,0 +1,67 @@ +package com.stdiet.custom.mapper; + +import java.util.List; +import com.stdiet.custom.domain.SysNutritionQuestion; + +/** + * 营养知识小问答Mapper接口 + * + * @author xzj + * @date 2021-04-13 + */ +public interface SysNutritionQuestionMapper +{ + /** + * 查询营养知识小问答 + * + * @param id 营养知识小问答ID + * @return 营养知识小问答 + */ + public SysNutritionQuestion selectSysNutritionQuestionById(Long id); + + /** + * 查询营养知识小问答列表 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 营养知识小问答集合 + */ + public List selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion); + + /** + * 新增营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); + + /** + * 修改营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); + + /** + * 删除营养知识小问答 + * + * @param id 营养知识小问答ID + * @return 结果 + */ + public int deleteSysNutritionQuestionById(Long id); + + /** + * 批量删除营养知识小问答 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysNutritionQuestionByIds(Long[] ids); + + /** + * 根据关键词搜索对应营养知识问答 + * @return + */ + public List getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion); +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionQuestionService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionQuestionService.java new file mode 100644 index 000000000..ee89626d4 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysNutritionQuestionService.java @@ -0,0 +1,70 @@ +package com.stdiet.custom.service; + +import java.util.List; +import java.util.Map; + +import com.stdiet.custom.domain.SysNutritionQuestion; + +/** + * 营养知识小问答Service接口 + * + * @author xzj + * @date 2021-04-13 + */ +public interface ISysNutritionQuestionService +{ + /** + * 查询营养知识小问答 + * + * @param id 营养知识小问答ID + * @return 营养知识小问答 + */ + public SysNutritionQuestion selectSysNutritionQuestionById(Long id); + + /** + * 查询营养知识小问答列表 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 营养知识小问答集合 + */ + public List selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion); + + /** + * 新增营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); + + /** + * 修改营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion); + + /** + * 批量删除营养知识小问答 + * + * @param ids 需要删除的营养知识小问答ID + * @return 结果 + */ + public int deleteSysNutritionQuestionByIds(Long[] ids); + + /** + * 删除营养知识小问答信息 + * + * @param id 营养知识小问答ID + * @return 结果 + */ + public int deleteSysNutritionQuestionById(Long id); + + /** + * 根据关键词搜索对应营养知识问答(Lucene索引分词查询) + * @return + */ + public Map getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion, int pageNum, int pageSize); + +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionQuestionServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionQuestionServiceImpl.java new file mode 100644 index 000000000..9aa936d82 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysNutritionQuestionServiceImpl.java @@ -0,0 +1,154 @@ +package com.stdiet.custom.service.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.reflect.ReflectUtils; +import com.stdiet.custom.utils.LuceneIndexUtils; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.TextField; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.stdiet.custom.mapper.SysNutritionQuestionMapper; +import com.stdiet.custom.domain.SysNutritionQuestion; +import com.stdiet.custom.service.ISysNutritionQuestionService; + +/** + * 营养知识小问答Service业务层处理 + * + * @author xzj + * @date 2021-04-13 + */ +@Service +public class SysNutritionQuestionServiceImpl implements ISysNutritionQuestionService +{ + @Autowired + private SysNutritionQuestionMapper sysNutritionQuestionMapper; + + public static final String index_path = "D:\\develop\\LuceneIndex\\nutritionQuestion"; + //private static final String index_path = ""; + + //建立索引的字段名称 + public static final String[] index_field_array = {"id", "title", "content", "key"}; + + /** + * 查询营养知识小问答 + * + * @param id 营养知识小问答ID + * @return 营养知识小问答 + */ + @Override + public SysNutritionQuestion selectSysNutritionQuestionById(Long id) + { + return sysNutritionQuestionMapper.selectSysNutritionQuestionById(id); + } + + /** + * 查询营养知识小问答列表 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 营养知识小问答 + */ + @Override + public List selectSysNutritionQuestionList(SysNutritionQuestion sysNutritionQuestion) + { + return sysNutritionQuestionMapper.selectSysNutritionQuestionList(sysNutritionQuestion); + } + + /** + * 新增营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + @Override + public int insertSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion) + { + sysNutritionQuestion.setCreateTime(DateUtils.getNowDate()); + if(sysNutritionQuestionMapper.insertSysNutritionQuestion(sysNutritionQuestion) > 0){ + return createNutritionQuestionIndex(sysNutritionQuestion) ? 1 : 0; + } + return 0; + } + + /** + * 修改营养知识小问答 + * + * @param sysNutritionQuestion 营养知识小问答 + * @return 结果 + */ + @Override + public int updateSysNutritionQuestion(SysNutritionQuestion sysNutritionQuestion) + { + sysNutritionQuestion.setUpdateTime(DateUtils.getNowDate()); + return sysNutritionQuestionMapper.updateSysNutritionQuestion(sysNutritionQuestion); + } + + /** + * 批量删除营养知识小问答 + * + * @param ids 需要删除的营养知识小问答ID + * @return 结果 + */ + @Override + public int deleteSysNutritionQuestionByIds(Long[] ids) + { + return sysNutritionQuestionMapper.deleteSysNutritionQuestionByIds(ids); + } + + /** + * 删除营养知识小问答信息 + * + * @param id 营养知识小问答ID + * @return 结果 + */ + @Override + public int deleteSysNutritionQuestionById(Long id) + { + return sysNutritionQuestionMapper.deleteSysNutritionQuestionById(id); + } + + /** + * 根据关键词搜索对应营养知识问答 + * @return + */ + @Override + public Map getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion, int pageNum, int pageSize){ + //return sysNutritionQuestionMapper.getNutritionQuestionListByKey(sysNutritionQuestion); + try{ + //建立索引 + LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(index_path); + return luceneIndexUtils.queryByKeyword(sysNutritionQuestion.getKey(), index_field_array, pageNum, pageSize); + }catch (Exception e){ + e.printStackTrace(); + } + Map result = new HashMap<>(); + result.put("total", 0); + result.put("data", new ArrayList<>()); + return result; + } + + /** + * 建立索引 + * @param sysNutritionQuestion + * @return + */ + private boolean createNutritionQuestionIndex(SysNutritionQuestion sysNutritionQuestion){ + try{ + //建立索引 + LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(index_path); + Document document = new Document(); + for (String fieldName : index_field_array) { + document.add(new TextField(fieldName, ReflectUtils.getFieldValue(sysNutritionQuestion, fieldName)+"", Field.Store.YES)); + } + return luceneIndexUtils.addIndexOne(document); + }catch (Exception e){ + e.printStackTrace(); + return false; + } + } +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/utils/LuceneIndexUtils.java b/stdiet-custom/src/main/java/com/stdiet/custom/utils/LuceneIndexUtils.java new file mode 100644 index 000000000..f25db5c50 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/utils/LuceneIndexUtils.java @@ -0,0 +1,319 @@ +package com.stdiet.custom.utils; + +import com.stdiet.common.utils.StringUtils; +import com.stdiet.custom.service.impl.SysNutritionQuestionServiceImpl; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.*; +import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; +import org.apache.lucene.search.*; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.Version; +import org.wltea.analyzer.core.IKSegmenter; +import org.wltea.analyzer.core.Lexeme; +import org.wltea.analyzer.lucene.IKAnalyzer; + +import java.io.File; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Lucene的IKAnalyzer工具类 + */ +public class LuceneIndexUtils { + + //分词器 + private IKAnalyzer analyzer = null; + //索引库 + private Directory directory = null; + //分词器工具 + private IndexWriterConfig config = null; + //流 + private IndexWriter indexWriter= null; + + public static final String default_primary_key = "id"; + + public static final Integer max_select_count = 1000; + + public static LuceneIndexUtils getLuceneIndexUtils(String indexPath){ + LuceneIndexUtils luceneIndexUtils = new LuceneIndexUtils(); + try { + //分词器 + luceneIndexUtils.analyzer = new IKAnalyzer(); + //使用智能分词 + luceneIndexUtils.analyzer.setUseSmart(true); + //索引库 + luceneIndexUtils.directory = FSDirectory.open(new File(indexPath)); + //工具装配分词器 + luceneIndexUtils.config = new IndexWriterConfig(Version.LUCENE_44, luceneIndexUtils.analyzer); + } catch (Exception e) { + e.printStackTrace(); + } + return luceneIndexUtils; + } + + /** + * 增加所有数据 + * @return + * @throws IOException + */ + public int addIndexs(ArrayList documents) throws IOException { + + //流 读取索引库 加装工具 + indexWriter = new IndexWriter(directory,config); + + //数据进流 + indexWriter.addDocuments(documents); + + try { + indexWriter.commit(); + return documents.size(); + }catch (Exception e){ + indexWriter.rollback(); + return 0; + }finally { + indexWriter.close(); + indexWriter= null; + //config=null; + } + + } + + /** + * 增加一条数据 + * @param document + * @return + * @throws IOException + */ + public boolean addIndexOne(Document document) throws IOException { + + + //流 读取索引库 加装工具 + indexWriter = new IndexWriter(directory,config); + + //数据进流 + indexWriter.addDocument(document); + + try { + indexWriter.commit(); + return true; + }catch (Exception e){ + indexWriter.rollback(); + return false; + }finally { + indexWriter.close(); + indexWriter= null; + } + + } + + /** + * 删除索引库所有数据 + * @return + * @throws IOException + */ + public boolean deleteAllIndex() throws IOException { + + try { + + //流 读取索引库 加装工具 + indexWriter = new IndexWriter(directory,config); + + indexWriter.deleteAll(); + indexWriter.commit(); + return true; + }catch (Exception e){ + e.printStackTrace(); + indexWriter.rollback(); + return false; + }finally { + indexWriter.close(); + indexWriter= null; + } + + } + + /** + * 删除索引库中一条数据 + * @param term + * @return + * @throws IOException + */ + public boolean deleteOne(Term term) throws IOException { + + + //流 读取索引库 加装工具 + indexWriter = new IndexWriter(directory,config); + + try { + indexWriter.deleteDocuments(term); + indexWriter.commit(); + return true; + }catch (Exception e){ + indexWriter.rollback(); + return false; + }finally { + indexWriter.close(); + indexWriter= null; + } + + } + + /** + * 修改索引库中一条数据 + * 注意:此处修改为 根据查找条件修改 如果有则修改 没有则新添 多条则修改一条(索引库的底层其实做法是 先删除,后修改- -) + * @param term + * @param document + * @return + * @throws IOException + */ + public boolean updateOne(Term term, Document document) throws IOException { + + try { + + //流 读取索引库 加装工具 + indexWriter = new IndexWriter(directory,config); + + indexWriter.updateDocument(term,document); + indexWriter.commit(); + return true; + }catch (Exception e){ + indexWriter.rollback(); + return false; + }finally { + indexWriter.close(); + indexWriter= null; + } + + } + + /** + * 查询索引库的数据(根据输入关键字) + * @param keyword + * @return + * @throws Exception + */ + public Map queryByKeyword(String keyword, String[] columns, int pageNum, int pageSize) throws Exception { + Map result = new HashMap<>(); + + //指定读取索引库的列数据 + //String[] columns = {"articleId","articleName","articleImage","articleContent"}; + + //装配 + MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_44, columns, analyzer); + + //解析输入关键字 + Query query = StringUtils.isEmpty(keyword) ? new WildcardQuery(new Term(default_primary_key, "*")) : queryParser.parse(keyword); + + //读索引库流 + IndexReader reader = DirectoryReader.open(directory); + + //获得读取对象 + IndexSearcher indexSearcher = new IndexSearcher(reader); + + //排序 + SortField sortField = new SortField(default_primary_key, SortField.Type.INT, true); + Sort sort = new Sort(sortField); + + //装配解析结果 指定读取量级 + TopDocs search = indexSearcher.search(query, max_select_count, sort); + + //获得数据地址数组 + ScoreDoc[] scoreDocs = search.scoreDocs; + + result.put("total", scoreDocs.length); + + //创建返回集合 --> 方便装配 + ArrayList list = new ArrayList<>(); + + int start = (pageNum - 1) * pageSize; + + if(start < scoreDocs.length){ + int end = pageSize * pageNum; + if (end > scoreDocs.length) { + end = scoreDocs.length; + } + for (int i = start; i < end; i++) { + //进集合 装配 + list.add(indexSearcher.doc(scoreDocs[i].doc)); + } + } + + result.put("data", list); + return result; + } + + /** + * 重置索引库 不解释 + * @return + * @throws IOException + */ + public boolean resetIndexDB(ArrayList documents) throws IOException { + + try { + boolean bool = deleteAllIndex(); + System.out.println(bool); + int i = addIndexs(documents); + System.out.println(i); + return true; + } catch (Exception e) { + return false; + } + } + + + /** + * 打印分词结果 + * @param keyWord + * @throws Exception + */ + public static void printAnalysisResult(String keyWord) throws Exception { + StringReader reader = new StringReader(keyWord); + IKSegmenter ik = new IKSegmenter(reader, true);// 当为true时,分词器进行最大词长切分 + Lexeme lexeme = null; + while ((lexeme = ik.next()) != null) { + System.out.println(lexeme.getLexemeText()); + } + } + + + + public static void main(String[] args) throws IOException { + try{ + LuceneIndexUtils luceneIndexUtils = LuceneIndexUtils.getLuceneIndexUtils(SysNutritionQuestionServiceImpl.index_path); + /*for (int i = 1 ; i < 100; i++){ + Document document = new Document(); + document.add(new TextField("id",i+"", Field.Store.YES)); + document.add(new TextField("title","什么食物是脂肪杀手?", Field.Store.YES)); + document.add(new TextField("content","黄瓜", Field.Store.YES)); + document.add(new TextField("key","脂肪|杀手|食物", Field.Store.YES)); + luceneIndexUtils.addIndexOne(document); + + }*/ + /*Document document = new Document(); + document.add(new TextField("id","1", Field.Store.YES)); + document.add(new TextField("title","什么食物是脂肪杀手?", Field.Store.YES)); + document.add(new TextField("content","黄瓜", Field.Store.YES)); + document.add(new TextField("key","脂肪|杀手|食物", Field.Store.YES)); + luceneIndexUtils.addIndexOne(document);*/ + + String[] columns = {"key","content","title"}; + Map map = luceneIndexUtils.queryByKeyword("猝死", SysNutritionQuestionServiceImpl.index_field_array, 1,10); + + System.out.println(Long.parseLong(map.get("total").toString())); + + for(Document document : (List)map.get("data")){ + System.out.println(document.get("id")+"-"+document.get("key")); + } + + //LuceneIndexUtils.printAnalysisResult("什么食物是脂肪杀手?"); + }catch (Exception e){ + e.printStackTrace(); + } + } + +} diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysNutritionQuestionMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionQuestionMapper.xml new file mode 100644 index 000000000..62c6b9159 --- /dev/null +++ b/stdiet-custom/src/main/resources/mapper/custom/SysNutritionQuestionMapper.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, title, content, `key`, title_content_index, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutrition_question + + + + + + + + insert into sys_nutrition_question + + title, + content, + `key`, + title_content_index, + show_flag, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{title}, + #{content}, + #{key}, + #{titleContentIndex}, + #{showFlag}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update sys_nutrition_question + + title = #{title}, + content = #{content}, + `key` = #{key}, + title_content_index = #{titleContentIndex}, + show_flag = #{showFlag}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + + where id = #{id} + + + + update sys_nutrition_question set del_flag = 1 where id = #{id} + + + + update sys_nutrition_question set del_flag = 1 where id in + + #{id} + + + + + + + \ No newline at end of file