Arhn - архитектура программирования

NEO4J Запрос на исключение некоторых узлов

С моделью данных, которая выглядит примерно так:

(u:User)-[:POSTED]->(p:Post {created_at: 123)-[:ABOUT]->(t:Topic {name: "Blue")

Как лучше всего найти определенное количество пользователей, которые разместили/создали сообщение с {created_at: 123} И также не имеют сообщения с {created_at: 124} на тему «Синий».

Самое близкое, что я могу сделать, это собрать идентификаторы, а затем исключить их, но это не масштабируется, когда у вас много узлов (миллионы).

[ОТРЕДАКТИРОВАНО]

Мне также нужно, чтобы created_at раз можно было указать как диапазоны.

25.08.2016

  • Поле Post.created_at проиндексировано? А как насчет Topic.name? 26.08.2016
  • Да, оба проиндексированы. 26.08.2016
  • Я отредактировал вопрос, добавив требование, чтобы время указывалось в виде диапазонов, как указано в комментарии к ответу @InversionFalcon. 26.08.2016

Ответы:


1

Этот запрос позволяет указать created_at диапазонов. В этом примере желательный диапазон — [123..130], а нежелательный «синий» диапазон — [131..140]. В вашем фактическом запросе конечные точки диапазона должны быть указаны с помощью параметров.

MATCH (user:User)-[:POSTED]->(p1:Post)
WHERE 123 <= p1.created_at <= 130
WITH user
OPTIONAL MATCH (user)-[:POSTED]->(p2:Post)-[:ABOUT]->(:Topic{name:"Blue"})
WHERE 131 <= p2.created_at <= 140
WITH user, p2
WHERE p2 IS NULL
RETURN COUNT(DISTINCT user) AS userCount;

Предложение OPTIONAL MATCH соответствует нежелательным "синим" путям, а предложение WHERE p2 IS NULL отфильтровывает user узлов, у которых есть такие пути.

26.08.2016
  • Вы также можете определить диапазоны с цепочками неравенств, которые немного упрощают предложения where. WHERE 123 <= p1.created_at <= 130 26.08.2016
  • @InverseFalcon: Это круто. Я никогда раньше не видел такого использования. Мой ответ был обновлен соответственно. 26.08.2016

  • 2

    Предполагая, что у вас есть индекс Post.created_at и Topic.name (для скорости), это должно работать:

    MATCH (user:User)-[:POSTED|CREATED]->(:Post{created_at:123})
    WHERE NOT EXISTS ( (user)-[:POSTED|CREATED]->(:Post{created_at:124})-[:ABOUT]->(:Topic{name:"Blue"}) )
    RETURN count(DISTINCT user) as userCount
    

    Стоит профилировать этот запрос, и если он не использует индексы created_at и name, укажите это в запросе с USING INDEX после вашего MATCH.

    25.08.2016
  • есть ли способ использовать диапазоны как во внешней, так и во внутренней части вместо 123 и 124? Бывший. ..{created_at: [123..130]} или мне нужно использовать WHERE для этого? Можно ли поместить предложение WHERE внутри блока WHERE NOT EXISTS (..)? 26.08.2016
  • Вы захотите использовать ответ киберсама для диапазонов. А для блоков EXISTS() и NOT EXISTS() более сложные предикаты трудно обрабатывать, так как вам обычно нужна переменная для этих предикатов, но вы не можете определить новые переменные в блоках EXISTS(). необязательное сопоставление Cybersam, где необязательное совпадение равно нулю, является лучшим обходным решением, но оно действительно требует лучшего решения, такого как EXCLUDE MATCH. 26.08.2016
  • Спасибо за объяснение 29.08.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..