Я новичок в базах данных 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
? Благодарю вас!
s.seller_name
иb.buyer_name
не существует, поэтому индексы будут пустыми. Вместо этого вы должны использоватьs.name
иb.name
. Однако этот вопрос не должен иметь отношения к вашему вопросу. - person cybersam   schedule 18.06.2020MATCH p=(:Seller)-[:SOLD_TO]->(:Buyer) RETURN p
- person cybersam   schedule 18.06.2020Buyer
иSeller
? - person cybersam   schedule 18.06.2020FIELDTERMINATOR '\t'
! - person cybersam   schedule 18.06.2020