关于size函数模糊模式定义及CONTAINS运算符的Cypher查询咨询
嘿,我明白你的需求了!之前用精确匹配选Test节点因为项目命名不统一卡壳了对吧?这就给你调整Cypher查询,搞定模糊匹配project属性+按模块名作为行输出+基于ABC表达式和size函数统计列的需求~
核心解决思路
常规MATCH子句里确实没有内置的CONTAINS匹配,但我们可以用WHERE子句配合CONTAINS运算符实现模糊匹配;同时通过分组聚合模块名,结合列表推导式+size()函数来计算你需要的统计值。
完整Cypher示例
// 1. 匹配所有Test类型节点,并用WHERE实现project属性的模糊匹配 MATCH (test:Test) WHERE test.project CONTAINS 'CustomerA' // 替换成你要模糊匹配的核心关键词 // 2. 关联到对应的模块节点(请根据你的数据模型调整关系类型和模块标签) MATCH (test)-[:BELONGS_TO]->(module:Module) // 3. 分组计算统计值:按模块名聚合,同时计算ABC相关统计 WITH module.name AS 模块名, collect(test) AS 模块下所有测试, count(test) AS 总测试数 // 4. 基于ABC表达式和size函数生成统计列 RETURN 模块名, 总测试数, // 统计符合ABC表达式的测试数量:用列表推导式筛选后取size size([t IN 模块下所有测试 WHERE t.status = 'ABC']) AS ABC匹配数, // 替换成你的实际ABC表达式 // 可以扩展更多统计,比如ABC匹配数的占比 round((size([t IN 模块下所有测试 WHERE t.status = 'ABC']) * 100.0 / 总测试数), 2) AS ABC占比(%) ORDER BY 模块名
关键细节说明
- 模糊匹配优化:如果需要忽略大小写,把条件改成
toLower(test.project) CONTAINS toLower('CustomerA');要匹配多个关键词的话,用OR拼接:test.project CONTAINS 'CustomerA' OR test.project CONTAINS 'CustomerB' - ABC表达式灵活调整:示例里用
t.status = 'ABC'作为判断逻辑,你可以换成任何符合需求的Cypher表达式(比如exists(t.abc_property)、t.category IN ['ABC', 'ABC_EXT']等) - 数据模型适配:请根据你的实际图谱调整模块的标签(比如
Module改成Service)和关联关系(比如:BELONGS_TO改成:PART_OF)
简化版(如果模块名是Test节点的属性)
如果模块名本身就是Test节点的一个属性(不需要关联其他节点),查询可以更简洁:
MATCH (test:Test) WHERE test.project CONTAINS 'CustomerA' WITH test.module_name AS 模块名, // 假设Test节点自带module_name属性 collect(test) AS 模块下所有测试 RETURN 模块名, size(模块下所有测试) AS 总测试数, size([t IN 模块下所有测试 WHERE 你的ABC表达式]) AS ABC匹配数 ORDER BY 模块名
内容的提问来源于stack exchange,提问作者Holger Zstar
相关产品推荐
相关产品推荐

