Мой процесс сопоставления / слияния не создает отношений в базе данных Neo4J - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в базах данных Neo4j / cypher / graph и пытался следовать руководству Neo4j , чтобы импортировать данные, которые у меня есть в csv, и создавать связи.

Следующий код делает то, что я хочу, с точки зрения чтения данных, создания узлов и установки свойств.

/* Importing data on seller-buyer relationshsips */
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:///customer_rel_table.tsv' AS row
FIELDTERMINATOR '\t'
MERGE (seller:Seller {sellerID: row.seller})
    ON CREATE SET seller += {name: row.seller_name,
                             root_eid: row.vendor_eid,
                             city: row.city}
MERGE (buyer:Buyer {buyerID: row.buyer})
    ON CREATE SET buyer += {name: row.buyer_name};


/* Creating indices for the properties I might want to match on */
CREATE INDEX seller_id FOR (s:Seller) on (s.seller_name);
CREATE INDEX buyer_id FOR (b:Buyer) on (b.buyer_name);

/* Creating constraints to guarantee buyer-seller pairs are not duplicated */
CREATE CONSTRAINT sellerID ON (s:Seller) ASSERT s.sellerID IS UNIQUE;
CREATE CONSTRAINT buyerID on (b:Buyer) ASSERT b.buyerID IS UNIQUE;

Теперь у меня есть нужные мне узлы (продавцы и покупатели), и я хотел бы связать покупателей и продавцов. Код, который я пробовал для этого:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:///customer_rel_table.tsv' AS row
MATCH (s:Seller {sellerID: row.seller})
MATCH (b:Buyer {buyerID: row.buyer})
MERGE (s)-[st:SOLD_TO]->(b)

Запрос выполняется, но я не получаю никаких взаимосвязей:

Query executed in 294ms. Query type: WRITE_ONLY. No results.

Поскольку я не спрашивая его ни о чем RETURN, я думаю, что комментарий «Нет результатов» правильный, но когда я смотрю на метаданные для БД, никаких связей не появляется. Кроме того, в моих данных ~ 220 тыс. Строк, поэтому 294 мс кажутся быстрыми.

РЕДАКТИРОВАТЬ: На запрос @ cybersam я попробовал этот запрос: MATCH p=(:Seller)-[:SOLD_TO]->(:Buyer) RETURN p, который дает No results.

Для ясности, в моих данных есть два поля, которые составляют основу отношений : seller и buyer, где продавец продает товар покупателю. Идентификаторы продавца повторяются, но для каждого продавца существуют уникальные пары продавец-покупатель.

Что мне нужно исправить в моем коде, чтобы получить взаимосвязь между sellers и buyers? Спасибо!

1 Ответ

1 голос
/ 18 июня 2020

В предложении LOAD CSV вашего второго запроса не указано FIELDTERMINATOR '\t'. По умолчанию терминатор - запятая (','). Вероятно, поэтому он не может ничего MATCH.

Попробуйте добавить FIELDTERMINATOR '\t' в конце этого предложения.

...