编辑: 我需要检查关系是否存在。如果不存在则计算节点之间的相似性,这是比特时间。然后,我需要在它们之间插入关系。 我需要对图中的所有节点重复此操作。
此方案的程序化范例如下:
If relationship exits
then calculate similarity and insert relationship
else
do nothing (or) return value
此查询也存在问题,它也可能导致内存异常。如果是这样,如何克服这个问题。
这是我的查询,
MATCH (a{word:"review"}),(b{word:"nothing"})
MERGE (a)-[r:jsim]->(b)
MERGE (a)<-[s:jsim]-(b)
SET r.val =
CASE WHEN NOT (HAS (r.val))
THEN [1]
ELSE 2 END
SET s.val =
CASE WHEN NOT (HAS (s.val))
THEN [2]
ELSE 1 END
RETURN r,s
在我的实际问题中,FALSE案例有一个大查询,它遍历图中必须在堆栈中存储许多值的所有节点。所以,这里可能会出现内存异常。
我的IF ELSE CASE查询是:
MATCH (a)-[r]->(b) where r.val>1
WITH collect(DISTINCT b.word) as our_word_pairs,a
MATCH (c)-[r]->(d) where r.val>1 AND Not c = a
WITH collect(DISTINCT d.word) as other_word_pairs,a,c,our_word_pairs
WITH FILTER(X in our_word_pairs where X in other_word_pairs) AS word_pair_intersection,
(our_word_pairs+other_word_pairs) AS all_word_pairs,other_word_pairs,a,c,our_word_pairs
WITH DISTINCT(all_word_pairs) as all_word_pairs,word_pair_intersection,a,c
WITH (1.0*SIZE(word_pair_intersection)/SIZE(all_word_pairs)) AS jsim
现在 jsim 是我需要分配的值。
假设a和b是两个节点,我必须找到它们之间的相似性并添加与值的关系。 A和B的相似性是它们之间的公共节点除以它们所连接的总节点数。
Ex: A-->p,A-->q.A-->r,A-->s
B-->r,B-->s,B-->t,B-->u,B-->v
Sim(A,B) = Common nodes/Total Nodes
= 2/7