浏览代码

每个关系只显示50条数据,防止数据过多显示混乱

yuchengwei 1 月之前
父节点
当前提交
070685d487
共有 1 个文件被更改,包括 16 次插入10 次删除
  1. 16 10
      src/main/java/com/qizhen/healsphere/service/impl/KgServicePostgresImpl.java

+ 16 - 10
src/main/java/com/qizhen/healsphere/service/impl/KgServicePostgresImpl.java

@@ -72,16 +72,22 @@ public class KgServicePostgresImpl implements KgService {
                     return null;
                 });
 
-        // 2. 查询关联的边和目标节点
-        String relationSql = "SELECT e.name as rType, m.id as target_id, m.name as target_name, " +
-                "m.category as target_label, " +
-                "(SELECT COUNT(*) FROM kg_edges WHERE src_id = m.id) as pCount " +
-                "FROM kg_nodes n " +
-                "JOIN kg_edges e ON n.id = e.src_id " +
-                "JOIN kg_nodes m ON e.dest_id = m.id " +
-                "WHERE n.category = ? AND n.name = ? " +
-                "AND n.status = '0' " +
-                "ORDER BY e.name";
+        // 2. 查询关联的边和目标节点,每种关系最多查询50条
+        String relationSql = "WITH RankedRelations AS ( " +
+                "    SELECT e.name as rType, m.id as target_id, m.name as target_name, " +
+                "           m.category as target_label, " +
+                "           (SELECT COUNT(*) FROM kg_edges WHERE src_id = m.id) as pCount, " +
+                "           ROW_NUMBER() OVER(PARTITION BY e.name ORDER BY m.id) as rn " +
+                "    FROM kg_nodes n " +
+                "    JOIN kg_edges e ON n.id = e.src_id " +
+                "    JOIN kg_nodes m ON e.dest_id = m.id " +
+                "    WHERE n.category = ? AND n.name = ? " +
+                "    AND n.status = '0' " +
+                ") " +
+                "SELECT rType, target_id, target_name, target_label, pCount " +
+                "FROM RankedRelations " +
+                "WHERE rn <= 50 " +
+                "ORDER BY rType";
 
         jdbcTemplate.query(relationSql, new Object[]{kgQuery.getLabelName(), kgQuery.getInputStr()},
                 (rs, rowNum) -> {