Как реализовать условие условных отношений в cypher для запроса Spring Neo4j? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть запрос на шифрование из Java (Spring Neo4j), который я использую, и он работает.

Основной запрос прост: он спрашивает, какие узлы ведут к другому узлу.

Суть проблемы заключается в том, что существует набор (из трех) элементов - contributor, tag и source - по которому запросу может потребоваться отфильтровать его результаты.

Два из них - tag и source - приносят с собой отношения, которые необходимо проверить. Но если они не предоставлены, то эти отношения не нужно проверять.

Neo-браузер предупреждает меня о том, что используемый мной запрос будет неэффективным по вполне понятным причинам:

@Query("MATCH (p:BoardPosition)<-[:PARENT]-(n:BoardPosition)<-[:PARENT*0..]-(c:BoardPosition), 
        (t:Tag), (s:JosekiSource) WHERE 
        id(p)={TargetID} AND 
        ({ContributorID} IS NULL or c.contributor = {ContributorID}) AND 
        ({TagID} IS NULL or ((c)-->(t) AND id(t) = {TagID}) ) AND 
        ({SourceID} IS NULL or ((c)-->(s) AND id(s) = {SourceID}) ) 
         RETURN DISTINCT n"
       )

List<BoardPosition> findFilteredVariations(@Param("TargetID") Long targetId,
                                           @Param("ContributorID") Long contributorId,
                                           @Param("TagID") Long tagId,
                                           @Param("SourceID") Long sourceId);

(для ясности код из строки многострочного запроса Java удален из кода)

Казалось бы, это было бы более эффективно, если бы условное включение теста отношений могло быть в самом предложении MATCH. Но это не представляется возможным.

Есть ли какой-нибудь способ шифрования, которым я могу улучшить эффективность этого?


FWIW: предупреждение браузера Neo4j:

Этот запрос строит декартово произведение между несвязанными образцами. Если часть запроса содержит несколько отключенных шаблонов, это построит декартово произведение между всеми этими частями. Это может создает большой объем данных и замедляет обработку запросов.

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