diff --git a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java index c3a80fd62..5bcb06586 100644 --- a/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java +++ b/src/main/java/org/support/project/knowledge/logic/KnowledgeLogic.java @@ -771,11 +771,15 @@ private List getKnowledgeDatas(List list) { LOG.trace("ナレッジ情報取得完了"); List knowledges = new ArrayList<>(); + Map knowledgeIdToList = new HashMap(); + for (SearchResultValue searchResultValue : list) { + KnowledgesEntity entity = null; + if (searchResultValue.getType() == TYPE_KNOWLEDGE) { Long key = new Long(searchResultValue.getId()); if (map.containsKey(key)) { - KnowledgesEntity entity = map.get(key); + entity = map.get(key); if (StringUtils.isNotEmpty(searchResultValue.getHighlightedTitle())) { entity.setTitle(searchResultValue.getHighlightedTitle()); } @@ -787,9 +791,7 @@ private List getKnowledgeDatas(List list) { // entity.setContent(org.apache.commons.lang.StringUtils.abbreviate(entity.getContent(), // LuceneSearcher.CONTENTS_LIMIT_LENGTH)); } - entity.setScore(searchResultValue.getScore()); - knowledges.add(entity); } } else if (searchResultValue.getType() == TYPE_FILE) { // TODO 1件づつ処理しているので、パフォーマンスが悪いので後で処理を検討 @@ -797,7 +799,7 @@ private List getKnowledgeDatas(List list) { Long fileNo = new Long(id); KnowledgeFilesEntity filesEntity = filesDao.selectOnKeyWithoutBinary(fileNo); if (filesEntity != null && filesEntity.getKnowledgeId() != null) { - KnowledgesEntity entity = knowledgesDao.selectOnKeyWithUserName(filesEntity.getKnowledgeId()); + entity = knowledgesDao.selectOnKeyWithUserName(filesEntity.getKnowledgeId()); if (entity == null) { // 添付ファイルの情報が検索エンジン内にあり、検索にHitしたが、それに紐づくナレッジデータは削除されていた break; @@ -818,7 +820,6 @@ private List getKnowledgeDatas(List list) { } entity.setContent(builder.toString()); entity.setScore(searchResultValue.getScore()); - knowledges.add(entity); } } else if (searchResultValue.getType() == TYPE_COMMENT) { // TODO 1件づつ処理しているので、パフォーマンスが悪いので後で処理を検討 @@ -826,7 +827,7 @@ private List getKnowledgeDatas(List list) { Long commentNo = new Long(id); CommentsEntity commentsEntity = CommentsDao.get().selectOnKey(commentNo); if (commentsEntity != null && commentsEntity.getKnowledgeId() != null) { - KnowledgesEntity entity = knowledgesDao.selectOnKeyWithUserName(commentsEntity.getKnowledgeId()); + entity = knowledgesDao.selectOnKeyWithUserName(commentsEntity.getKnowledgeId()); if (entity == null) { // コメントの情報が検索エンジン内にあり、検索にHitしたが、それに紐づくナレッジデータは削除されていた break; @@ -840,13 +841,12 @@ private List getKnowledgeDatas(List list) { } entity.setContent(builder.toString()); entity.setScore(searchResultValue.getScore()); - knowledges.add(entity); } } else if (searchResultValue.getType() == IndexType.bookmarkContent.getValue()) { // TODO 1件づつ処理しているので、パフォーマンスが悪いので後で処理を検討 String id = searchResultValue.getId().substring(FileParseBat.WEB_ID_PREFIX.length()); Long knowledgeId = new Long(id); - KnowledgesEntity entity = knowledgesDao.selectOnKeyWithUserName(knowledgeId); + entity = knowledgesDao.selectOnKeyWithUserName(knowledgeId); if (entity != null && entity.getKnowledgeId() != null) { StringBuilder builder = new StringBuilder(); builder.append("[Bookmark Content] "); @@ -859,9 +859,20 @@ private List getKnowledgeDatas(List list) { } entity.setContent(builder.toString()); entity.setScore(searchResultValue.getScore()); - knowledges.add(entity); } } + + if(entity == null) continue; + + if(knowledgeIdToList.containsKey(entity.getKnowledgeId())) { + int listId = knowledgeIdToList.get(entity.getKnowledgeId()).intValue(); + KnowledgesEntity updateEntity = knowledges.get(listId); + String content = updateEntity.getContent(); + updateEntity.setContent(content + entity.getContent()); + } else { + knowledges.add(entity); + knowledgeIdToList.put(entity.getKnowledgeId(), new Long(knowledges.size() - 1)); + } } // 以下の付加情報は、ナレッジテーブルに持ち各テーブルに再取得しない