searchfix
Change-Id: Ifa1521dca11fb6e17717c21bae075f780f58c1ce
diff --git a/src/main/java/com/example/g8backend/controller/PostController.java b/src/main/java/com/example/g8backend/controller/PostController.java
index 41be09a..1f7e886 100644
--- a/src/main/java/com/example/g8backend/controller/PostController.java
+++ b/src/main/java/com/example/g8backend/controller/PostController.java
@@ -115,6 +115,7 @@
@RequestParam(required = false) String keyword,
@RequestParam(required = false) List<Long> tags,
@RequestParam(required = false) String author) {
+ System.out.println(keyword + tags + author);
List<Post> result = postService.searchPosts(keyword, tags, author);
return ResponseEntity.ok(ApiResponse.success(result));
}
diff --git a/src/main/java/com/example/g8backend/mapper/PostMapper.java b/src/main/java/com/example/g8backend/mapper/PostMapper.java
index 178df39..2de0429 100644
--- a/src/main/java/com/example/g8backend/mapper/PostMapper.java
+++ b/src/main/java/com/example/g8backend/mapper/PostMapper.java
@@ -11,21 +11,25 @@
List<Post> getPostsByUserId(@Param("userId") Long userId);
// 搜索帖子
@Select("<script>" +
- "SELECT p.* " +
+ "SELECT DISTINCT p.* " + // 添加 DISTINCT 解决重复问题
"FROM posts p " +
- "LEFT JOIN post_tag pt ON p.post_id = pt.post_id " +
- "LEFT JOIN tags t ON pt.tag_id = t.tag_id " +
- "LEFT JOIN users u ON p.user_id = u.user_id " +
- "WHERE (p.post_title LIKE CONCAT('%', #{keyword}, '%') OR p.post_content LIKE CONCAT('%', #{keyword}, '%')) " +
+ "LEFT JOIN users u ON p.user_id = u.user_id " + // 只保留必要的 JOIN
+ "WHERE (p.post_title LIKE CONCAT('%', #{keyword}, '%') " +
+ " OR p.post_content LIKE CONCAT('%', #{keyword}, '%')) " +
"<if test='tagIds != null and tagIds.size() > 0'> " +
- "AND pt.tag_id IN " +
- "<foreach item='tagId' collection='tagIds' open='(' separator=',' close=')'> " +
- "#{tagId} " +
- "</foreach> " +
- "</if>" +
- "<if test='author != null'> " +
- "AND u.user_name = #{author} " +
- "</if>" +
+ " AND p.post_id IN ( " + // 改为子查询确保正确过滤标签
+ " SELECT pt.post_id FROM post_tag pt " +
+ " WHERE pt.tag_id IN " +
+ " <foreach item='tagId' collection='tagIds' open='(' separator=',' close=')'> " +
+ " #{tagId} " +
+ " </foreach> " +
+ " ) " +
+ "</if> " +
+ "<if test='author != null and !author.isEmpty()'> " + // 增加空检查
+ " AND u.user_name LIKE CONCAT('%', #{author}, '%') " + // 改为模糊匹配
+ "</if> " +
+ "ORDER BY p.created_at DESC " + // 添加默认排序
+ "LIMIT 1000" + // 添加结果限制防止性能问题
"</script>")
List<Post> searchPosts(@Param("keyword") String keyword,
@Param("tagIds") List<Long> tagIds,
diff --git a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
index 6e7c4c2..678f3f6 100644
--- a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
@@ -87,7 +87,8 @@
}
@Override
public List<Post> searchPosts(String keyword, List<Long> tagIds, String author) {
- return postMapper.searchPosts(keyword, tagIds, author); // 调用mapper的搜索方法
+ List<Post> results = postMapper.searchPosts(keyword, tagIds, author);
+ return results;
}
@Override
@Transactional