Я делаю «друг друга» в MATCH в Neo4j. Единственное, что меня выбрасывает, это попытка ограничить все отношения по дате.Матч FOAF, но ограничение пути по дате; определенно последовательно, в Neo4j
Основной график следующим образом:
«реальный» версия графа имеет 10 1-й степени друзей и 3385 2-й степени друзей.
И хотя я не помещал свойство даты на каждом ребре на изображении выше, действительно, это так. Нет ни одного заказа на какие-либо даты.
Общая идея довольно проста: я хотел бы не обращать внимания на любые отношения, у которых есть свойство даты, которое превышает установленную максимальную дату.
Немного сложная часть состоит в том, что если ограничение максимальной даты нарушено в пределах первого отношения (например, на одном из трех ребер, которые оторвались от узла на изображении выше), то это край разбивается пополам, а другой обход этого пути должен иметь место. (например, я не хочу ни одного из листовых узлов).
Я написал:
MATCH
(n)-[f1:FRIEND]-()-[f2:FRIEND]-(m)
WITH n, m,split('1962-1-1', '-') AS maxdate
WHERE n.person_id='180'
AND(
(
toInt(maxdate[0]) > toInt(split(f1.date, '-')[0])
)
OR
(
toInt(maxdate[0]) = toInt(split(f1.date, '-')[0])
AND
toInt(maxdate[1]) >= toInt(split(f1.date, '-')[1])
))
AND(
(
toInt(maxdate[0]) > toInt(split(f2.date, '-')[0])
)
OR
(
toInt(maxdate[0]) = toInt(split(f2.date, '-')[0])
AND
toInt(maxdate[1]) >= toInt(split(f2.date, '-')[1])
))
RETURN m;
Этот блок кода побежал в течение приблизительно 20 минут, и в конце концов, по-видимому, в результате чего-то близко к тому, что я стремился. Вот как это выглядит в браузере:
(Он имеет 350 узлов)
во-первых, я признаю, что это очевидно, что некоторые ужасно написанный код (как с точки зрения эстетики и производительности). Во-вторых, я замечаю непривязанные узлы по периметру.
То, что я думаю, произошло, когда состояние даты первой степени не удается, но отношения второй степени не делают, и поэтому я заканчиваю «другом друга», который я не хочу быть включенным.
Как изменить мое условие даты, чтобы исключить эти отдельно стоящие узлы, когда край первой степени недействителен?
Если у кого-нибудь есть понимание, я был бы очень признателен. (Не слишком мягко, но благодаря сообществу SO, я уже довольно далеко продвинулся довольно быстро, и за это я благодарен.)
Я все еще получаю эти странные, изолированные и отключенные узлы по периметру ... необходимость дальнейшего изучения (а вдруг я понимаю, это 4:45!) –
, что всегда бывает :) (время, которое я имею в виду) Я исправил синтаксис в последнем (пропустил скобку) –
Есть ли какой-либо рейтинг этих запросов с точки зрения производительности? –