我有一个包含2种节点的图表:person&food.我有一种关系 - Ate有一个属性 - count.每次person 吃 a时food,count关系的属性都会增加.
我的目标是计算两个person节点之间的相似性.我在网上找到了这个算法来计算相似度,我想用它.如何将其转换为Cypher查询?
sim = 0
for k = 1 to n:
sim = sim + (1 - Math.abs((N1k/H1 - N2k/H2)))(N1k+N2k)/(H1+H2)
Run Code Online (Sandbox Code Playgroud)
哪里:
sim =相似性指数
H1 = food吃掉的项目总数person1
H2 = food吃掉的项目总数person2
n = 共同food节点数
N1k = 1 次吃掉'n' 项中的'第k'个项目
N2k = 2 次在"n"个常用项目中吃过"第k个" 项目的次数 personfoodfoodpersonfoodfood
我已准备好骨架,但我不知道如何继续.
Start me=node(name="%s")
MATCH me-[r1:Ate]->some_food<-[r2:Ate]-other_dude …Run Code Online (Sandbox Code Playgroud) 在我的域中,节点可以具有与其他实体相同类型的多个关系.每个关系都有几个属性,我想检索由至少2个呈现给定属性的关系连接的节点.
EG:节点之间的关系具有属性year.如何找到与year设置至少有两个传出关系的节点2012?
Chypher到目前为止为什么查询看起来像这样(语法错误)
START x = node(*)
MATCH x-[r:RELATIONSHIP_TYPE]->y
WITH COUNT(r.year == 2012) AS years
WHERE HAS(r.year) AND years > 1
RETURN x;
Run Code Online (Sandbox Code Playgroud)
我也试过嵌套查询,但我相信这是不允许的Cypher.最接近的是以下但我不知道如何摆脱值为1的节点:
START n = node(*)
MATCH n-[r:RELATIONSHIP_TYPE]->c
WHERE HAS(r.year) AND r.year == 2012
RETURN n, COUNT(r) AS counter
ORDER BY counter DESC
Run Code Online (Sandbox Code Playgroud) 我试图了解Neo4J java遍历API,但经过彻底的阅读后,我仍然坚持某些观点.
我似乎知道的:
PathExpander和之间的区别BranchOrderingPolicy.根据我的理解,前者告诉我们哪些关系有资格从特定位置进行探索,后者指定应该评估它们的顺序.
我想知道以下事项:
这种理解是否正确或在何种程度上是正确的,或者是否可以改变以给出正确的理解.
如果正确,有何PathExpander不同Evaluator.
怎么做PathExpander和BranchOrderingPolicy工作.我打算问的是,PathExpander每次在遍历中添加关系时都会查询,并且对返回的可迭代关系有什么作用.与分支排序类似.
在遍历期间如何以及何时组件Expander,BranchOrdering,Evaluator,Uniqueness进入画面.基本上我想知道模板算法,其中一个人会说第一个扩展器被要求扩展关系的集合,然后咨询订购策略以选择其中一个符合条件....
如果正确,那么指定的排序策略是否BranchOrderingPolicy仅适用于符合条件的关系(在扩展器完成之后).也许它一定是.
请包含可能有助于理解API的任何其他内容.
我想使用单个密码查询创建多个断开连接的节点
文件说:
使用其属性的参数创建多个节点.通过为Cypher提供一组地图,它将为每个地图创建一个节点.
CREATE (n { props })
RETURN n
Run Code Online (Sandbox Code Playgroud)
在neo4j休息网络控制台我试过(在许多其他的东西)
CREATE (n [{a:1,b:2}, {a:1,b:2}]) RETURN n
Run Code Online (Sandbox Code Playgroud)
但收到此错误
无效的输入'[':预期的空格,注释,节点标签,MapLite,参数,')'或关系模式(第1行,第11列)"CREATE(n [{a:1,b:2},{a :1,b:2}])返回n"
有可能做我正在尝试的事情,如果是这样的话怎么样?
我正在尝试为neo4j数据库建模图数据库.这是详细信息:
代理商 - 产品 - 等级 - 佣金.
会有代理商.会有产品(比如健康产品).
代理将加入另一个代理或可以直接加入.代理只能有一个父代但只有多个子代.在其他代理商下加入代理商的广度和深度没有限制.
代理商将被提升,等级取决于他们购买的产品的总价值.代理商按月支付佣金,这取决于他们和他们的孩子在一个月内购买的产品的总价值.
节点:代理{名称,年龄,...,等级} A1,A2,A3 ......
节点:产品{名称,描述,...,价格} P1,P2,P3 ......
关系:购买{日期,时间,数量,总工资}
(代理) - [:购买] - >(产品)
代理商可以一次购买多个产品.代理商可以多次购买同一产品.
例如:
A1 {'John Doe','34',...,'4'}
P1 {'Px1','desx1',...,'$ 2.3'}
A1 - [:购买{03-01-2014,09.30,02,'$ 4.6'}] - >(P1)
A1 - [:购买{07-01-2014,13.45,01,'$ 2.3'}] - >(P1)
?这是我被困的地方.那么,每当代理商购买产品时,我需要创建一个关系[:purchase],即使它是同一个产品?
在这种情况下,相同两个节点之间的相同类型和标签的多个关系是否有效?因为代理商可能会经常购买相同的产品,这将创造更大的号码.相同节点之间的多个关系.
该模型是否遵循标准建模原则?谁能建议更好的建模或修正?
我有neo4j数据库,其中包含数百万个类型为person的节点,我想删除所有person节点的特定属性。我试图通过match查询实现它,但是它正在扫描所有节点。
这是我尝试过的查询。
MATCH (p:Person)
REMOVE p.fatherName
Run Code Online (Sandbox Code Playgroud)
除了此查询,还有其他快速替代方法吗?
背景
我一直在使用neo4j来查询相当大(但最终不复杂)的数据集.我正在将cypher直接写入Web界面,并在文本文件(old-skool)中跟踪我的查询.
问题
我喜欢我回来的结果,所以我想采取另一个步骤并围绕它建立一个更严格的界面,以便我可以将它交给非技术人员来探索一些预先编程的参数中的数据.
我已经阅读了node4j API参考,我确信我可以从头开始构建一个接口,结合使用D3进行布局,并使用(例如)node.js中的seraph或neo4j rubygem构建后端中间件应用程序.
但是,标准的neo4j web界面非常好,我想知道我是否可以进一步利用它并将查询结果(包括强制导向图)嵌入我的应用程序中,而不是从头开始?
可能的方法
这种方法有优先权吗?我想旅程将是这样的:
对此有任何建议都是王牌.
我试图了解Tinkerpop和Gremlin(上下文:http ://tinkerpop.apache.org/ )之间的区别。
我的假设是Gremlin只是可以使用不同后端的查询/遍历语言,而Tinkerpop是Gremlin客户端+ Gremlin后端(db)。官方描述说Tinkerpop是一个“图形计算框架”,对我来说有点太含糊。
我有一个用例,其中用户位于诸如
user1 --HAS_CHILD-> user2 --HAS_CHILD-> user3 --HAS_CHILD-> user4
对于给定的用户,我需要获得该用户拥有的所有汽车以及该用户的孩子拥有的所有汽车。对于汽车,我需要拥有用户(所有者)以及该用户与给定用户的深度。
例如 给定的用户为user2,则user3的深度为1,user4的深度为2。
我可以使用以下查询获取汽车的详细信息和所有者信息,但如何获取childDepth呢?
g.V().has("User", "id", "user2")
.union(
__.out("OWNS").hasLabel("Car"),
__.repeat(
__.out("HAS_CHILD").hasLabel("User")
).emit().out("OWNS").hasLabel("Car")
)
.project("plateNumber", "owner", "model", "year", "childDepth")
.by(__.values("plateNumber").fold())
.by(__.in("OWNS").values("owner").fold())
.by(__.values("model").fold())
.by(__.values("year").fold())
.by(???)
Run Code Online (Sandbox Code Playgroud) I have a graph database which looks like this (simplified) diagram:
Each unique ID has many properties, which are represented as edges from the ID to unique values of that property. Basically that means that if two ID nodes have the same email, then their has_email edges will both point to the same node. In the diagram, the two shown IDs share both a first name and a last name.
I'm having difficulty writing an efficient Gremlin query …
graph-databases ×10
neo4j ×7
gremlin ×3
cypher ×2
nosql ×2
tinkerpop ×2
janusgraph ×1
modeling ×1
similarity ×1
tinkerpop3 ×1