在neo4j中存储温度变量

在neo4j中存储温度变量,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我有一些针对neo4j数据库执行的密码查询。查询的格式如下 MATCH p=(j:JOB)-[r:HAS|STARTS]->(s:URL)-[r1:VISITED]->(t:URL) WHERE j.job_id =5000 and r1.origin='iframe' and r1.job_id=5000 AND NOT (t.netloc =~ 'VERY_LONG_LIST') RETURN count(r1) AS number_iframes; 如果你不明白我在做

我有一些针对neo4j数据库执行的密码查询。查询的格式如下

MATCH p=(j:JOB)-[r:HAS|STARTS]->(s:URL)-[r1:VISITED]->(t:URL) 
WHERE j.job_id =5000 and r1.origin='iframe' and r1.job_id=5000 AND NOT (t.netloc =~ 'VERY_LONG_LIST')   
RETURN count(r1) AS number_iframes;
如果你不明白我在做什么。这是一个简单得多的查询

MATCH (s:WORD)
WHERE NOT (s.text=~"badword1|badword2|badword3")
RETURN s
我基本上是想把一些单词和具体的列表匹配起来

问题是这个列表非常大,因为你可以看到我的job_id=5000,我有20000多个job,所以如果我的白名单长度是1MB,那么我将得到非常大的查询。我尝试了500个作业,最终得到了200 MB的文件查询

我试图使用from执行这些查询,但这是不可行的,因为我的post请求长度将非常大,并且将超时。因此,我想到了使用

neo4j-shell -file <queries_file> 

您的netloc是什么数据类型

如果您在netloc上有一个索引,您也可以在{list}中使用
t.netloc,其中{list}是从外部提供的参数

这样大的正则表达式不会太快 您的regexp和netloc格式到底是什么样的?也许您可以将其更改为拆分+索引列表查找

通常,也可以为regexp提供外部参数

您还可以使用“IN”+索引作为作业ID

您还可以运行一个单独的作业,用标签标记白名单中的作业,并使用该标签进行额外筛选,例如在匹配中

你为什么要检查两次?作业id=5000还不够吗


j.job\u id=5000和r1.job\u id=5000

我在netloc上没有索引,但我可以创建一个(换句话说,这可能会阻止我创建索引)。netloc基本上是一个FQDN值,类似于www.google.com、www.yahoo.com。我可以在{list}中使用
t.netloc
,但我仍然有相同的大查询,这意味着我不能向REST API发送很多查询。我检查了两次,因为我可以有以下场景
(j1)-->(www.example1.com)-->(google.com)-->(google.com/jquery.js)
(j2)-->(www.example2.com)-->(google.com)-->(google.com/jquery.js)
当我在j1进行匹配时,它从j1作业节点开始,但当它到达google节点时,它会显示google和google.com/jquery.js之间的所有关系,这是我不想要的。我只想在起始节点为j1时显示google和jquery之间的关系。明白了吗?运行neo4j shell-f时有没有可移植的输出文档?我使用正则表达式而不是列表的一个原因是,我想排除所有子域。例如,如果我有s2.google.com作为URL节点之一,但我的白名单中有google.com,那么它将被排除,因为我匹配。*\.google.com。如果它是一个简单的列表,我就不能这样做。我知道你想做什么,也许更好er是否向基域添加一个附加属性?并为该属性编制索引?
SAVE $whitelist="word1,word2,word3,word4,word5...."

MATCH p=(j:JOB)-[r:HAS|STARTS]->(s:URL)-[r1:VISITED]->(t:URL) 
    WHERE j.job_id =5000 and r1.origin='iframe' and r1.job_id=5000 AND NOT (t.netloc =~ $whitelist) 
    RETURN count(r1) AS number_iframes;