Я запускаю этот запрос из оболочки neo4j, и я не могу понять, почему он не заканчивается. Он должен вычислить сходство Jaccard между двумя журналами, которые публикуют на них те же авторы.Cypher Quay для вычисления Jaccard сходство
Запрос заключается в следующем:
MATCH (j1:JOURNAL), (j2:JOURNAL)
WHERE id(j1) > id(j2)
WITH j1, j2
OPTIONAL MATCH common=(j1)<-[:PUBLISHED_ON]-(art1:ARTICLE)
<-[:WRITES]-(a:AUTHOR)-[:WRITES]->(art2:ARTICLE)-[:PUBLISHED_ON]->(j2)
WITH j1, j2, COUNT(common) as intersection
OPTIONAL MATCH (j1)<-[:PUBLISHED_ON]-(art1:ARTICLE)<-[:WRITES]-(a:AUTHOR)
WITH j1, j2, intersection, COLLECT(DISTINCT a.id_author) AS t1s
OPTIONAL MATCH (j2)<-[:PUBLISHED_ON]-(art2:ARTICLE)<-[:WRITES]-(a:AUTHOR)
WHERE NOT a IN t1s
WITH j1, j2, intersection, t1s + COLLECT(DISTINCT a.id_author) AS union
RETURN j1, j2, (intersection*1.0)/size(union)*100 as js
ORDER BY js desc;
кто-нибудь идея, почему это не заканчивается? Это верно? Заранее благодарим за любую помощь.
Первой идеей является использование LIMIT (допустим, LIMIT 1) и подавление ORDER BY, чтобы увидеть, возвращает ли оно что-либо. Если это так, то возникает некоторая проблема с производительностью. Если это не так ... ясно, что в запросе есть какая-то проблема – RafaelCaballero
Я добавил LIMIT 2 и подавил ORDER BY, но он не возвращает ошибок или синтаксических проблем. На самом деле, он ничего не возвращает, просто продолжает работать. Я не вижу проблемы или проблемы в моем запросе; Я запускаю его из neo4j-shell на сервере. – Valentina
Насколько велика база данных - мы говорим о тысячах или миллионах узлов? –