我试图在neo4j数据库中进行一些基本的相似性搜索。它看起来像这样:
begin
create (_1:`Article` {`name`:"Bow", `weight`:"20"})
create (_2:`Article` {`name`:"Shield", `weight`:"30"})
create (_3:`Article` {`name`:"Knife", `weight`:"40"})
create (_4:`Article` {`name`:"Sword", `weight`:"50"})
create (_5:`Article` {`name`:"Helmet", `weight`:"15"})
create (_6:`Order` {`customer`:"Peter"})
create (_7:`Order` {`customer`:"Paul"})
create (_8:`Order` {`customer`:"Mary"})
create (_9:`Accessory` {`name`:"Arrow",`type`:"optional", `weight`:"2"})
create _6-[:`CONTAINS` {`timestamp`:"1413204480"}]->_1
create _6-[:`CONTAINS` {`timestamp`:"1413204480"}]->_2
create _6-[:`CONTAINS` {`timestamp`:"1413204480"}]->_3
create _7-[:`CONTAINS` {`timestamp`:"1413204480"}]->_1
create _7-[:`CONTAINS` {`timestamp`:"1413204480"}]->_4
create _8-[:`CONTAINS` {`timestamp`:"1413204480"}]->_5
create _9-[:`BELONGS_TO` {`timestamp`:"1413204480"}]->_1
;
commit
非常无意义的数据库,我知道。唯一的原因是这篇文章。
当新订单出现时,我需要查明是否已下达类似订单。类似的意思是:现有的或新的客户和相同的产品。困难的部分是:我需要所有(直接或间接)包含节点的权重之和。
以下是我所拥有的:
START n=node(*)
MATCH p1 = (a:Order)-[*]->n, p2 = (b:Order)-[*]->m
WHERE a<>b AND n.name = m.name
RETURN reduce (sum="", x in p2 | sum+x.weight) limit 25;
然而,似乎p2不是合适的东西。 Cypher期待收藏而不是路径。
真的很抱歉这个新手的帖子,但请放心:我是一个非常感激的新手。谢谢! 雷
答案 0 :(得分:2)
在您的查询中,您似乎假装p2
是新订单的路径。我假设在您的实际查询中,您将b
绑定到特定节点。此外,您的时间戳和权重应具有数字值(不带引号)。
此查询将返回&#34; new&#34;的总重量。路径。这是你想要的吗?
MATCH p1 =(a:Order)-[*]->n, p2 =(b:Order)-[*]->m
WHERE a<>b AND n.name = m.name
WITH p2, collect(m) AS ms
RETURN reduce(sum=0, x IN ms | sum+x.weight)
LIMIT 25;
顺便说一下,START n=node(*)
是多余的。它与使用未绑定的n
相同。
请参阅this console。