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