You need to enable JavaScript to run this app. Neo4j基于证件优先级的Person节点单条匹配记录查询实现
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j基于证件优先级的Person节点单条匹配记录查询实现

Neo4j 多证件优先级匹配查询实现

前置环境说明

当前图存储内已存在固定的节点关系链路:
(p:Person)-[:HAS_DOCUMNET]->(id:Identification)-[:HAS_DESCRIPTION]->(d:Document)

业务输出要求

最终查询结果需要满足:

  • 每位人员仅输出1行记录,不展示同人关联的多份证件
  • 每行固定返回三个字段:personId、documentType、idNumber
  • 证件选取严格遵循固定优先级:
    • 最高优先级:存在documentType = "Passport"的关联记录时,直接取该证件的idNumber,不再匹配其他证件
    • 次高优先级:无Passport证件时,存在documentType = "VoterCard"的关联记录,取该证件的idNumber
    • 最低匹配优先级:上述两类证件都不存在时,存在documentType = "PanCard"的关联记录,取该证件的idNumber

样例数据关联关系

  • P1:关联3个Identification节点,对应绑定的Document类型分别为Passport、VoterCard、PanCard
  • P2:关联2个Identification节点,对应绑定的Document类型分别为VoterCard、PanCard
  • P3:关联3个Identification节点,对应绑定的Document类型分别为PanCard、AadharCard、VoterCard
  • P4:关联1个Identification节点,对应绑定的Document类型为PanCard

预期匹配结果

按照优先级规则筛选后,每个人最终返回的证件信息为:

  • P1:匹配Passport类型,返回证件id1
  • P2:无Passport记录,匹配VoterCard类型,返回证件id4
  • P3:无Passport记录,匹配VoterCard类型,返回证件id8
  • P4:无Passport、无VoterCard记录,匹配PanCard类型,返回证件id9

可直接运行的Cypher查询语句

通过给不同证件分配优先级分值(分值越小优先级越高),按人员分组取最高优先级的单条记录,可完全匹配上述规则:

MATCH (p:Person)-[:HAS_DOCUMNET]->(id:Identification)-[:HAS_DESCRIPTION]->(d:Document)
WITH p, 
  CASE d.documentType
    WHEN 'Passport' THEN 1
    WHEN 'VoterCard' THEN 2
    WHEN 'PanCard' THEN 3
    ELSE 10000
  END AS priority,
  d.documentType AS documentType,
  id.idNumber AS idNumber
// 过滤非规则内的证件类型,不参与优先级匹配
WHERE priority <= 3
// 按优先级分值升序排列,同人员下最高优先级证件排在最前
ORDER BY priority ASC
WITH p, collect({docType: documentType, idNum: idNumber}) AS sortedDocs
RETURN
  p.personId AS personId,
  sortedDocs[0].docType AS documentType,
  sortedDocs[0].idNum AS idNumber

内容的提问来源于stack exchange,提问作者R_Kalavadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 23:54:07