Проблема производительности с двумя полнотекстовыми вызовами в одном запросе шифра - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно объединить результаты двух полнотекстовых вызовов. Оба возвращаются отдельно в течение нескольких секунд, но занимают вместе минуты.

Я удалил все 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, что эти вызовы независимы?

1 Ответ

1 голос
/ 07 октября 2019

Так как ваш первый CALL возвращает результаты 500K, ваш второй CALL вызывается 500K раз. Это явно не то, что вы намеревались и очень, очень медленно. И это также даст неверные результаты.

Используйте WITH 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
...