Извлечение данных из Neo4j с использованием nodejs - PullRequest
0 голосов
/ 17 апреля 2020

Я впервые использую Neo4j с nodejs. Я пытаюсь использовать конкретный вариант использования: «Пользователь может искать mov ie, например: Titani c, для рекомендации других похожих фильмов результат должен содержать фильмы того же жанра, фильмы того же режиссера». Когда Я ищу MOV ie, я могу получить связанные узлы, такие как актер, режиссер и жанр MOV ie. что я хочу дальше, так это другие фильмы, связанные с этим режиссером и жанром.

Здесь 'title' - это имя mov ie, которое я передаю в методе REST API Get.

session.run("MATCH (n:movie{name : $title}) -[:Acted_In|:Directed |: Belong_To]-(r) Return r ",
                        { title: req.params.name }

                        )

        .then(function (data) {

            data.records.forEach(function(record){
            console.log("record._fields[0].properties = ",record._fields[0].properties.name);
            result.push(record._fields[0].properties.name);  
              })
                 console.log(result);

          })
                        ```

1 Ответ

0 голосов
/ 17 апреля 2020

Этот запрос Cypher должен работать для вашего варианта использования ( "Пользователь может искать mov ie, например: Titani c, для рекомендации других похожих фильмов результат должен содержать фильмы того же жанра, фильмы того же режиссера. "):

MATCH (m:movie)
WHERE m.name = $title
MATCH (m)-[:Belong_To]->()<-[:Belong_To]-(x)
WITH m, COLLECT(x) AS xs
MATCH (m)<-[:Directed]-()-[:Directed]->(y)
WITH m, xs, COLLECT(y) AS ys
UNWIND (xs + ys) AS otherMovie
RETURN m, COLLECT(DISTINCT otherMovie) AS recommendations

Я предполагаю, что отношение Belong_To указывает на жанр. Я также предполагаю, что у всех фильмов есть по крайней мере один жанр и один режиссер; если это не так, то соответствующий MATCH должен быть OPTIONAL MATCH.

. В этом запросе используется агрегирующая функция COLLECT для раздельного сбора фильмов с одинаковыми жанрами ( xs) и те же директора (ys). Затем UNWIND s сочетает xs и ys, так что он может использовать COLLECT(DISTINCT ...) для получения списка отдельных фильмов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...