如何解决neo4j中匹配两个节点属性的最快方法
我在neo4j中有两组节点。 Mail
节点具有这种形式
{
time : year/month/day,content : Hey Anna Sorry I took awhile getting ...
}
节点word
具有以下形式:
{
word : ***
}
我想将所有节点word
与节点Mail
匹配,该节点在特定时间范围内在其内容中包含这些单词。所以我写了这个查询:
MATCH (n:Mail)
WHERE
n.time>'2001/01/01' and n.time<'2001/02/01'
MATCH (w:Word)
WHERE
ANY(word IN split(n.content,' ') WHERE word = w.word)
return n.content as content,w.word as word
但是执行需要很多时间。我认为Mail.content
的字词太多,无法运行此查询,并且有太多的Mail
和Word
无法分析。它们分别是1642年和12379。
有没有办法解决这个问题?
解决方法
最重的操作将在n
和w
之间的联接中进行,这将是笛卡尔乘积。除非您更改数据模型,否则您将找不到解决方法。
但是,您可以通过使用CONTAINS
而不是any()
来提高性能:
EXPLAIN MATCH (n:Mail)
WHERE
n.time>'2001/01/01' and n.time<'2001/02/01'
MATCH (w:Word)
WHERE n.content CONTAINS w.word
return n.content as content,w.word as word
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。