neo4j Cypher中多个可能值相等的实用方法

pu3pd22g  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(57)

这个问题是在@cybersam对我之前的一个问题的回答的基础上提出的,然而,关于这个问题的先前知识是不必要的。
在模式搜索查询中,@cybersam的查询的简化版本,理想情况下,我希望不仅将路径匹配到输入模式,而且匹配到所有同构(板旋转和反射)和排列。
在这种情况下,模式是长度为2的字符串列表(A-Z),例如['pq', 'dd', 'pp']
因此,在该查询中,我必须为模式列表中的每个模式创建一个OR语句:

MATCH p =   (mFirst:MoveNode)
           -[:NEXT_MOVE*${patternLength - 1}]
          ->(:MoveNode)

WHERE (
            mFirst.move = HEAD($patterns[0]) 
        AND [m IN NODES(p) | m.move] = $patterns[0]
      )
   OR (
            mFirst.move = HEAD($patterns[1]) 
        AND [m IN NODES(p) | m.move] = $patterns[1]
      )
   OR (...)
   .
   .
   .

字符串
有没有一种方法可以让这个程序化?因为,这是不可扩展的,因为我不知道我最终会有多少个排列。

ggazkfy8

ggazkfy81#

您正在查找ANY predicate

MATCH p =(mFirst:MoveNode)-[:NEXT_MOVE*${patternLength - 1}]->(:MoveNode)
WHERE ANY(
  x IN $patterns 
  WHERE ( mFirst.move = head(x) AND [m IN nodes(p) | m.move] = x )
)

字符串

相关问题