匹配Cypher中列表数据类型的关键字

时间:2017-02-03 14:58:18

标签: regex neo4j cypher match

我运行了一个密码查询,从我的图表中删除所有具有相同名称的重复关系。关系具有属性(名称,置信度,时间)。我使用以下查询保持关系具有最高置信度值并收集所有时间值:

MATCH (e0:Entity)-[r:REL]-(e1:Entity)
WITH e0, r.name AS relation, COLLECT(r) AS rels, COLLECT(r.confidence)AS relConf, MAX(r.confidence) AS maxConfidence, COLLECT(r.time) AS relTime, e1 WHERE SIZE(rels) > 1
SET (rels[0]).confidence = maxConfidence, (rels[0]).time = relTime 
FOREACH (rel in tail(rels) | DELETE rel)
RETURN rels, relation, relConf, maxConfidence, relTime

旧数据:

name,confidence,time
likes, 0.87, 20111201010900
likes, 0.97, 20111201010600

新数据:

name,confidence,time
likes, 0.97, [20111201010900,20111201010600]

有人可以建议一个匹配查询来查找新的“时间”属性中包含2011年的关系吗? (我从csv加载时使用toInt转换时间)。

1 个答案:

答案 0 :(得分:3)

您的新数据结构绝对不容易进行此类搜索,但可以在中等图表上进行:

MATCH (n:Entity)-[r:REL]->(x)
WHERE ANY(
          t IN extract(x IN r.time | toString(x)) 
          WHERE t STARTS WITH "2011"
         )
RETURN r