Neo4j Cypher - 按公共输入节点过滤节点未解决

Neo4j Cypher - Filtering nodes by Input nodes in common Doesn't resolve

我有一个大型数据库 >100 万客户,>100k 产品

我正在尝试根据实时数据构建产品推荐。但是,我构建的第一个查询从未解决。 (或者至少我在 30 分钟后停止)

我想输入一个客户并获取他们购买的产品的所有使用情况。然后我想获得所有具有相同用途和更多用途的客户。 (我本来打算做之后的事情,但无法通过这部分)

所有节点都按唯一 ID 编入索引。

MATCH (c:customer {customer_id:'0c4c518e5d1eaf3fc39f93463c2406ad8b659d6c22c9107179e3992f647b12aa'})-[:PURCHASE]->(p:product)-[:HAS]->(u:use)

WITH DISTINCT(u.section_id) as uses

MATCH (ac:customer)-[:PURCHASE]->(ap:product)-[:HAS]->(au:use)

WHERE au.section_id in uses

RETURN ac

我构建了一个执行完整推荐的新查询。但仍然需要1分钟...... 我认为问题是我正在匹配 :use 然后返回,这一定是有太多节点需要排序。

MATCH (c:customer {customer_id:'0c4c518e5d1eaf3fc39f93463c2406ad8b659d6c22c9107179e3992f647b12aa'})-[:PURCHASE]->(p)<-[:PURCHASE]-(oc)
MATCH (u:use)<-[:HAS]-(p)-[:HAS]->(h:color)-[:IS_A]->(ph)     
WHERE c <> oc  AND oc.age > (c.age-10) AND oc.age < (c.age+10) 
MATCH (oc)-[:PURCHASE]->(np)-[:HAS]->(u)  
WITH p, np, ph, u, COLLECT(DISTINCT p.gra_id) as styles 
WHERE p.product_code <> np.product_code AND np.gra_id in styles AND (np)-[:HAS]->(:color)-[:IS_A]->(ph) 
WITH u.name as use, np.article_id as product, count(*) as score 
ORDER BY score DESC 
RETURN use, collect(product)[0..6] as products 
ORDER BY use