知识问答相关
This commit is contained in:
		| @@ -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; | ||||
| } | ||||
| @@ -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; | ||||
| } | ||||
| @@ -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<SysNutritionQuestion> 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<String> getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion); | ||||
| } | ||||
| @@ -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<SysNutritionQuestion> 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<String, Object> getNutritionQuestionListByKey(SysNutritionQuestion sysNutritionQuestion, int pageNum, int pageSize); | ||||
|  | ||||
| } | ||||
| @@ -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<SysNutritionQuestion> 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<String, Object> 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<String, Object> 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; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -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<Document> 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<String, Object> queryByKeyword(String keyword, String[] columns, int pageNum, int pageSize) throws Exception { | ||||
|         Map<String, Object> 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<Document> 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<Document> 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<String,Object> map = luceneIndexUtils.queryByKeyword("猝死", SysNutritionQuestionServiceImpl.index_field_array, 1,10); | ||||
|  | ||||
|             System.out.println(Long.parseLong(map.get("total").toString())); | ||||
|  | ||||
|             for(Document document : (List<Document>)map.get("data")){ | ||||
|                 System.out.println(document.get("id")+"-"+document.get("key")); | ||||
|             } | ||||
|  | ||||
|             //LuceneIndexUtils.printAnalysisResult("什么食物是脂肪杀手?"); | ||||
|         }catch (Exception e){ | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,114 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
|         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
|         "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.stdiet.custom.mapper.SysNutritionQuestionMapper"> | ||||
|  | ||||
|     <resultMap type="SysNutritionQuestion" id="SysNutritionQuestionResult"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="title"    column="title"    /> | ||||
|         <result property="content"    column="content"    /> | ||||
|         <result property="key"    column="key"    /> | ||||
|         <result property="titleContentIndex"    column="title_content_index"    /> | ||||
|         <result property="showFlag"    column="show_flag"    /> | ||||
|         <result property="createTime"    column="create_time"    /> | ||||
|         <result property="createBy"    column="create_by"    /> | ||||
|         <result property="updateTime"    column="update_time"    /> | ||||
|         <result property="updateBy"    column="update_by"    /> | ||||
|         <result property="delFlag"    column="del_flag"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|     <!-- 部分字段resultMap --> | ||||
|     <resultMap type="com.stdiet.custom.dto.response.NutritionQuestionResponse" id="SysNutritionQuestionResultExtended"> | ||||
|         <result property="id"    column="id"    /> | ||||
|         <result property="title"    column="title"    /> | ||||
|         <result property="content"    column="content"    /> | ||||
|         <result property="key"    column="key"    /> | ||||
|         <result property="titleContentIndex"    column="title_content_index"    /> | ||||
|     </resultMap> | ||||
|  | ||||
|     <sql id="selectSysNutritionQuestionVo"> | ||||
|         select id, title, content, `key`, title_content_index, show_flag, create_time, create_by, update_time, update_by, del_flag from sys_nutrition_question | ||||
|     </sql> | ||||
|  | ||||
|     <select id="selectSysNutritionQuestionList" parameterType="SysNutritionQuestion" resultMap="SysNutritionQuestionResult"> | ||||
|         <include refid="selectSysNutritionQuestionVo"/> where del_flag = 0 | ||||
|         <if test="title != null  and title != ''"> and title = #{title}</if> | ||||
|         <if test="content != null  and content != ''"> and content = #{content}</if> | ||||
|         <if test="key != null  and key != ''"> and `key` = #{key}</if> | ||||
|         <if test="titleContentIndex != null  and titleContentIndex != ''"> and title_content_index = #{titleContentIndex}</if> | ||||
|         <if test="showFlag != null "> and show_flag = #{showFlag}</if> | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectSysNutritionQuestionById" parameterType="Long" resultMap="SysNutritionQuestionResult"> | ||||
|         <include refid="selectSysNutritionQuestionVo"/> | ||||
|         where id = #{id} and del_flag = 0 | ||||
|     </select> | ||||
|  | ||||
|     <insert id="insertSysNutritionQuestion" parameterType="SysNutritionQuestion" useGeneratedKeys="true" keyProperty="id"> | ||||
|         insert into sys_nutrition_question | ||||
|         <trim prefix="(" suffix=")" suffixOverrides=","> | ||||
|             <if test="title != null">title,</if> | ||||
|             <if test="content != null">content,</if> | ||||
|             <if test="key != null and key != ''">`key`,</if> | ||||
|             <if test="titleContentIndex != null">title_content_index,</if> | ||||
|             <if test="showFlag != null">show_flag,</if> | ||||
|             <if test="createTime != null">create_time,</if> | ||||
|             <if test="createBy != null">create_by,</if> | ||||
|             <if test="updateTime != null">update_time,</if> | ||||
|             <if test="updateBy != null">update_by,</if> | ||||
|             <if test="delFlag != null">del_flag,</if> | ||||
|         </trim> | ||||
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | ||||
|             <if test="title != null">#{title},</if> | ||||
|             <if test="content != null">#{content},</if> | ||||
|             <if test="key != null and key != ''">#{key},</if> | ||||
|             <if test="titleContentIndex != null">#{titleContentIndex},</if> | ||||
|             <if test="showFlag != null">#{showFlag},</if> | ||||
|             <if test="createTime != null">#{createTime},</if> | ||||
|             <if test="createBy != null">#{createBy},</if> | ||||
|             <if test="updateTime != null">#{updateTime},</if> | ||||
|             <if test="updateBy != null">#{updateBy},</if> | ||||
|             <if test="delFlag != null">#{delFlag},</if> | ||||
|         </trim> | ||||
|     </insert> | ||||
|  | ||||
|     <update id="updateSysNutritionQuestion" parameterType="SysNutritionQuestion"> | ||||
|         update sys_nutrition_question | ||||
|         <trim prefix="SET" suffixOverrides=","> | ||||
|             <if test="title != null">title = #{title},</if> | ||||
|             <if test="content != null">content = #{content},</if> | ||||
|             <if test="key != null and key != ''">`key` = #{key},</if> | ||||
|             <if test="titleContentIndex != null">title_content_index = #{titleContentIndex},</if> | ||||
|             <if test="showFlag != null">show_flag = #{showFlag},</if> | ||||
|             <if test="createTime != null">create_time = #{createTime},</if> | ||||
|             <if test="createBy != null">create_by = #{createBy},</if> | ||||
|             <if test="updateTime != null">update_time = #{updateTime},</if> | ||||
|             <if test="updateBy != null">update_by = #{updateBy},</if> | ||||
|             <if test="delFlag != null">del_flag = #{delFlag},</if> | ||||
|         </trim> | ||||
|         where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysNutritionQuestionById" parameterType="Long"> | ||||
|         update sys_nutrition_question set del_flag = 1 where id = #{id} | ||||
|     </update> | ||||
|  | ||||
|     <update id="deleteSysNutritionQuestionByIds" parameterType="String"> | ||||
|         update sys_nutrition_question set del_flag = 1 where id in | ||||
|         <foreach item="id" collection="array" open="(" separator="," close=")"> | ||||
|             #{id} | ||||
|         </foreach> | ||||
|     </update> | ||||
|  | ||||
|     <!-- 根据关键词查询对应知识问题 --> | ||||
|     <select id="getNutritionQuestionListByKey" parameterType="SysNutritionQuestion" resultMap="SysNutritionQuestionResultExtended"> | ||||
|         select id, title, `key`, content where del_flag = 0 | ||||
|         <if test="showFlag != null "> and show_flag = #{showFlag}</if> | ||||
|         <if test="key != null and key != ''"> | ||||
|           and (title like CONCAT('%',#{key},'%') or key like CONCAT('%',#{key},'%') or titleContentIndex like CONCAT('%',#{key},'%')) | ||||
|         </if> | ||||
|         order by id desc | ||||
|     </select> | ||||
|  | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user