У меня есть график с различными типами узлов и ребер. Я хотел бы получить все пути между двумя узлами (индекс WORD), которые связаны ребрами (отношение NEXT_WORD) с свойством edgeLevel = 1. Я не хочу получать соединения, где «edgeLevel! = 1». Я написал (-а) запросОчень тяжелый cypher MATCH-запрос
MATCH p=(a:WORD{wholeWord:"are"})-[r:NEXT_WORD*1..3{edgeLevel:1}]->(b:WORD{wholeWord: "you"}) RETURN length(p);
но очень тяжелый. Я пытаюсь выяснить, как оптимизировать этот запрос cypher, но я понятия не имею. Есть ли более быстрый и менее тяжелый способ сделать это? Этот запрос возвратил 32 строки в 7931 мс.
Спасибо за Ваш ответ. Однако добавление USING INDEX b: WORD (wholeWord) не ускорило запрос. Предыдущая стоимость запроса: 378082 всего db хитов, Ваше первое предложение: planner: RULE. 10984317 всего дБ хитов. Добавление нового отношения NEXT_WORD_1 довольно обходится с этой ситуацией, но я думаю, что это единственный вариант, который остался. Я попробую переопределить эту структуру графика, и я дам вам ответ в следующем комментарии. – Piotr0123456
Я реализовал новые типы отношений, и теперь он работает быстрее. Мой запрос с новым типом отношения 'NEXT_WORD_1' планировщик: COST. Всего 61194 хитов за последние 188 мс. Ваше первое решение (с использованием двух индексов и «NEXT_WORD_1') планировщик: ПРАВИЛО. Общее количество просмотров в 1999 году - 172 мс. – Piotr0123456