Как установить resultDataContents в Neo4jrb?

Я хочу визуализировать данные из Neo4j с помощью фронтенд-библиотеки D3.js в приложении Rails, используя Neo4jrb. Например, я мог бы использовать следующий запрос, чтобы получить данные моего графика.

query = "MATCH path = (a)-[b]->(c) RETURN path"
result = Neo4j::Session.current.query(query)

Но этот запрос не дает мне точных данных, которые мне нужны.

Согласно руководстве по визуализации данных Neo4j, существует возможность установить параметр resultDataContents на "graph" . (Документация Neo4j для "resultDataContents")

Это именно то, что мне нужно для моего приложения. Есть ли возможность задать этот параметр в Neo4jrb, или другая идея, как добиться такого результата?


person LimonChillo    schedule 19.05.2016    source источник
comment
Не уверен в ruby, но я написал необработанный запрос Cypher для извлечения узлов и отношений из neo4j (старая версия), надеюсь, это поможет: github.com/paradite/Graphpedia/blob/master/models/term.js#L476   -  person paradite    schedule 20.05.2016


Ответы (1)


К сожалению, в настоящее время нет. Гем neo4j-core (который использует гем neo4j) был построен для абстрагирования от формата REST. Формат "graph" возвращает данные другим способом.

У вас есть несколько вариантов. Вы можете сами выполнять запросы JSON или извлекать узлы и отношения из запросов, которые вы выполняете, а затем создавать свою собственную структуру узлов / отношений, которая возвращается. В любом случае это может быть более перспективным, если вы когда-нибудь захотите переключиться на Болт.

Способ, которым вы могли бы сделать это в вашем случае:

query = "MATCH path = (a)-[b]->(c) RETURN nodes(path) AS nodes, rels(path) AS rels"
result = Neo4j::Session.current.query(query)
response = {nodes: [], rels: []}
result.each do |row|
  response[:nodes].concat(row.nodes)
  response[:rels].concat(row.rels)
end
response[:nodes].uniq!
response[:rels].uniq!
person Brian Underwood    schedule 19.05.2016
comment
спасибо, но у меня есть еще одна проблема с вашей идеей. nodes идентифицируются по их uuid. Внутри rels начальный и конечный узлы идентифицируются с помощью neo-id, поэтому их невозможно сопоставить (например, для использования в D3)? - person LimonChillo; 20.05.2016
comment
Вы должны иметь возможность получить neo_id для узлов, вызвав метод neo_id - person Brian Underwood; 20.05.2016
comment
Спасибо, у меня есть отличное решение с вашими советами :) - person LimonChillo; 24.05.2016