Cypher 中对多个可能值进行平等的实用方法

问题描述 投票:0回答:1

这个问题是 @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 (...)
   .
   .
   .

有没有办法使其程序化?因为,这是不可扩展的,因为我不知道最终会有多少种排列。

neo4j cypher
1个回答
0
投票

您正在寻找

ANY
谓词

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 )
)
© www.soinside.com 2019 - 2024. All rights reserved.