Neo4j 一个密码查询中有两个全文调用的性能问题
我需要合并两次全文通话的结果。两者在几秒钟内分别返回,但在一起需要几分钟 我删除了所有MATCH和其他子句以最好地隔离问题 如果我打电话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
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