首页 > 解决方案 > 在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运行此查询的单词太多MailWord需要分析的单词太多。它们分别是 1642 和 12379。

有没有办法解决这个问题?

标签: neo4j

解决方案


最繁重的操作将在 和 之间的连接中nw这将是一个笛卡尔积。除非您更改数据模型,否则您将找不到解决方法。

但是,您可能会通过使用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

推荐阅读