Neo4j 一个密码查询中有两个全文调用的性能问题

Neo4j 一个密码查询中有两个全文调用的性能问题,neo4j,cypher,full-text-search,Neo4j,Cypher,Full Text Search,我需要合并两次全文通话的结果。两者在几秒钟内分别返回,但在一起需要几分钟 我删除了所有MATCH和其他子句以最好地隔离问题 如果我打电话 CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node as kw RETURN count(kw) 或 两者在不到一秒的时间内返回,显示约500000 但如果我打电话 CALL db.index.fulltext.queryNodes("nameIndex", 'som

我需要合并两次全文通话的结果。两者在几秒钟内分别返回,但在一起需要几分钟

我删除了所有MATCH和其他子句以最好地隔离问题

如果我打电话

CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node as kw
RETURN count(kw)

两者在不到一秒的时间内返回,显示约500000

但如果我打电话


CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node as kw
CALL db.index.fulltext.queryNodes("article_fulltext", 'other word') YIELD node
RETURN count(a), count(kw)
这需要几分钟

我试图分开,但没有效果

CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node as kw
WITH kw , count(kw) as kwl
WITH kwl
CALL db.index.fulltext.queryNodes("article_fulltext", 'other word') YIELD node as a 
WITH kwl, a ,count(a) as al
RETURN kwl, al

如何告诉neo4j此调用是独立的?

由于您的第一次
调用
返回500K个结果,您的第二次
调用
被调用500K次。这显然不是你想要的,而且非常非常缓慢。它也会给你错误的计数

使用
WITH COUNT()
将第一次
调用的结果数减少为一个

例如,这应该要快得多,并且还可以为您提供正确的计数:

CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node
WITH COUNT(node) AS kws
CALL db.index.fulltext.queryNodes("article_fulltext", 'other word') YIELD node
RETURN COUNT(node) AS ows, kws

为什么不使用
联合
?通常不存在密码查询的独立部分。操作按行执行,因此无论第一次调用返回多少行,下一次操作(第二次调用)都将针对这些行执行。您可能希望在每次通话后立即使用联合或进行聚合。此外,您的计数聚合也不正确。计数与聚合中存在的非聚合变量有关(这称为分组键)。因此,
kw,count(kw)
意味着您将在其自己的行中有每个
kw
条目,并且每个行都有单个条目(1)的计数。如果要在所有行中计算所有
kw
,则需要删除
kw
,或将其聚合,使其不再是分组键。
CALL db.index.fulltext.queryNodes("nameIndex", 'some word') YIELD node
WITH COUNT(node) AS kws
CALL db.index.fulltext.queryNodes("article_fulltext", 'other word') YIELD node
RETURN COUNT(node) AS ows, kws