2016-03-06 2 views
0

У меня есть график с различными типами узлов и ребер. Я хотел бы получить все пути между двумя узлами (индекс 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 мс.

Cypher PROFILE query

ответ

1

Вы появляетесь уже есть индекс по :WORD(wholeWord). Однако ваш запрос не использует индекс, чтобы найти и a, и b. Этот запрос должен быть быстрее:

MATCH p=(a:WORD { wholeWord:"are" })-[r:NEXT_WORD*..3 {edgeLevel:1}]->(b:WORD { wholeWord: "you" }) 
USING INDEX a:WORD(wholeWord) 
USING INDEX b:WORD(wholeWord) 
RETURN length(p); 

Но ваш запрос может быть даже быстрее, если вам не требуется определенное значение свойства для ваших отношений (из-за меньше хитов DB), тем более, что нет никакого способа, чтобы создать индекс для отношений. Так что, если вы могли бы использовать [:NEXT_WORD_1] отношения вместо [:NEXT_WORD {edgeLevel:1}] отношений, это было бы самым быстрое:

MATCH p=(a:WORD { wholeWord:"are" })-[r:NEXT_WORD_1*..3]->(b:WORD { wholeWord: "you" }) 
USING INDEX a:WORD(wholeWord) 
USING INDEX b:WORD(wholeWord) 
RETURN length(p); 
+0

Спасибо за Ваш ответ. Однако добавление USING INDEX b: WORD (wholeWord) не ускорило запрос. Предыдущая стоимость запроса: 378082 всего db хитов, Ваше первое предложение: planner: RULE. 10984317 всего дБ хитов. Добавление нового отношения NEXT_WORD_1 довольно обходится с этой ситуацией, но я думаю, что это единственный вариант, который остался. Я попробую переопределить эту структуру графика, и я дам вам ответ в следующем комментарии. – Piotr0123456

+0

Я реализовал новые типы отношений, и теперь он работает быстрее. Мой запрос с новым типом отношения 'NEXT_WORD_1' планировщик: COST. Всего 61194 хитов за последние 188 мс. Ваше первое решение (с использованием двух индексов и «NEXT_WORD_1') планировщик: ПРАВИЛО. Общее количество просмотров в 1999 году - 172 мс. – Piotr0123456

Смежные вопросы