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

问题描述 投票:0回答:1

我需要合并两个全文电话的结果。两种返回都在几秒钟内分开,但要花几分钟。

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

如果我打电话

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

CALL db.index.fulltext.queryNodes("article_fulltext", 'other word') YIELD node as a 
RETURN count(a)

两者都在不到一秒钟的时间内返回,并显示大约500.000

但是如果我打电话


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此调用是独立的?

neo4j cypher full-text-search
1个回答
0
投票

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

使用COUNT将结果数从第一个CALL减少为一个。

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

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
© www.soinside.com 2019 - 2024. All rights reserved.