Browse Source

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

yuchengwei 1 month ago
parent
commit
070685d487

+ 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) -> {