Новичок в Neo4J, поэтому заранее извиняюсь, если я делаю что-то ужасно неправильно. Я пытаюсь показать пользовательские статьи, в которых они могут быть заинтересованы, основываясь на выбранных категориях и тегах, которые им понравились независимо.
Моя модель в Neo4j примерно такая
(:USER)-[:LIKES]->(:TAG)
(:ARTICLE)-[:PUBLISHED_BY]->(:PROVIDER)
(:ARTICLE)-[:HAS_CATEGORY]->(:CATEGORY)
(:USER)-[:DISLIKES]-(:ARTICLE)
(:USER)-[:INTERESTED_IN]->(:CATEGORY)
Когда я пытаюсь выполнить следующий запрос, чтобы получить желаемые результаты ... Я получаю их, но выполнение запроса занимает 16-18 секунд.
MATCH (u:USER {id: $userid})-[:LIKES]->(t:TAG)
WITH u,t, collect(t.name) as tags
UNWIND tags as tag with u,tag
MATCH (c:CATEGORY)<-[*]-(a:ARTICLE)-[pub:PUBLISHED_BY]->(p:PROVIDER)
WHERE a.keywords contains tag OR c.id in $categoryArray
AND NOT (u)-[:DISLIKES]->(a)
RETURN DISTINCT a.id AS id, a.title AS title, pub.pubDate
ORDER BY pub.pubDate DESC LIMIT 250
Есть ли более быстрый и лучший способ получить желаемые результаты?
Примечание: я использую версию Neo4j 3.4.1 на машине с Ubuntu с кешем страниц: 512 МБ и размером кучи MIN & MAX: 1500 МБ