这个问题是 @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 (...)
.
.
.
有没有办法使其程序化?因为,这是不可扩展的,因为我不知道最终会有多少种排列。
您正在寻找
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 )
)