【发布时间】:2021-06-30 10:07:30
【问题描述】:
在 Neo4j 中,我有一组图表,包括种子术语和通过关系 [:SYNONYM_OF] 附加到这些种子术语的同义词。我正在编写一个函数,其中包含与某个种子词的同义词匹配的单词的任何节点都会与列出的任何相关同义词一起返回。我当前的查询如下所示:
MATCH (b)-[*]->(z)-[*]->(n),
(syn)<-[r]->(seed:Seed_Term {name: "valuation"})
WHERE (
(
n.name CONTAINS toLower(syn.name)
OR n.content CONTAINS toLower(syn.name)
)
OR (
n.name CONTAINS toUpper(syn.name)
OR n.content CONTAINS toUpper(syn.name)
)
)
AND (b:Label)
AND (n:Title OR n:Text OR n:Column OR n:RowName OR n:Cell)
AND (z:Pdf)
RETURN n.name AS node,
syn.name AS synonym_found,
seed.name AS seed_term,
b.labelName AS company,
z.year AS year,
r AS rel_type
LIMIT 1000
唯一的问题是如果找到三个不同的同义词,它会返回包含内容(节点)的行三次,每次 synonym_found 都不同。我知道我应该改用collect(syn.name) 而不是syn.name,但是每当我这样做时,代码都会进入一个无限循环,以至于我只需要终止查询。即使我最后写了LIMIT 1,也会发生这种情况。为什么collect() 会导致这种情况发生?
【问题讨论】: