neo4j - 在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
推荐阅读
- python - 如何根据另一列中的唯一值对一列中的值进行分组?
- javascript - 无法在 php 中借出外部 CSS 和 JS 文件
- php - 如何以 E-pub 格式下载 mysql 参考文档
- python-3.x - 使用python在文本文件中列出超出范围的索引
- reactjs - 监听 useState 默认值事件
- java - 使用 Java 通过 HTTP 流式传输数据
- python-3.x - 有没有办法解决 If than 语句错误
- python - 流利的Python书,例子2.15
- angular - 想要获取用户从 ngxdaterangepicker 的日历中选择的开始和结束日期。还有中间的日期
- javascript - 转换 jQuery 和 vanilla js