|
@@ -72,16 +72,22 @@ public class KgServicePostgresImpl implements KgService {
|
|
return null;
|
|
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()},
|
|
jdbcTemplate.query(relationSql, new Object[]{kgQuery.getLabelName(), kgQuery.getInputStr()},
|
|
(rs, rowNum) -> {
|
|
(rs, rowNum) -> {
|