Я загружаю набор шахматных данных, где внутри строки напечатан «снимок» шахматной доски (FEN). Сначала я использую слияние на FEN, чтобы получить все уникальные позиции следующим образом:
LOAD CSV WITH HEADERS FROM 'file:///xxx/test.csv' AS LINE
FIELDTERMINATOR ';'
MERGE (p:Position { FEN:LINE.FEN })
Переходя от FEN к FEN, я хочу запечатлеть некоторые детали, касающиеся ходов игрока, а также игры. Но для этого мне нужно сначала упорядочить данные на основе игры и moveNumber. Это мой шифр:
LOAD CSV WITH HEADERS FROM 'file:///xxx/test.csv' AS LINE
FIELDTERMINATOR ';'
WITH LINE.FEN as FEN,LINE.GameNumber as gn,LINE.MoveNumber as mn,LINE.Side as side,LINE.Move as move
order by gn,mn
WITH COLLECT({FEN:FEN,gID:gn,moveNumber:mn,Side:side,Move:move}) as col
FOREACH(i in RANGE(0, length(col)-2)|
FOREACH(ps1 in [col[i]] |
FOREACH(ps2 in [col[i+1]] |
FOREACH (ignore in CASE
WHEN ps1.gID = ps2.gID THEN [1]
ELSE [] END |
CREATE UNIQUE (pos1: Position{FEN: ps1.FEN})-[:MOVE{gID:ps2.gID,moveNumber:ps2.moveNumber,Side:ps2.Side,Move:ps2.Move}]->(pos2: Position{FEN: ps2.FEN})
))))
Ответ, который я получаю, - Unbound Pattern !
, что я перевожу как «neo4j не может связать pos1 и pos2 в каждом случае».
Чтобы проверить это, я использовал MERGE
и CREATE
вместо CREATE UNIQUE
, и оба по какой-то причине воссоздали все узлы Position. Хуже того, для каждого gID воссоздается весь шаблон вместо отдельной цепочки, как на этом изображении (воссозданные узлы и шаблоны) .
Я был бы очень признателен, если бы кто-то мог указать мне, почему это происходит, или предложить мне альтернативный подход. Я использую neo4j 2.3.5.