2015-01-08 3 views
0

Скажем, у вас есть набор узлов, содержащих все английские буквы, и ваша задача состоит в том, чтобы хранить слова «foo» и «four», просто используя некоторые общие «object1» и «object2» "узлы и столько же ребер, как вы хотите ..График Dbs - Позиции узлов - теория графов

вы хранящие отношения как

(object1)--contains-->(f) 
(object1)--contains-->(o) 

и

(object2)--contains-->(f) 
(object2)--contains-->(o) 
(object2)--contains-->(u) 
(object2)--contains-->(r) 

так что вы можете запросить на„содержит“отношения, чтобы найти буквы данных слов.

но как же хранить двойной «o» в «foo»?

И как сохранить порядок букв для каждого объекта?

Другими словами, как хранить относительные позиции узлов (например, (а) предшествует (б))?

А что, если эти позиции должны быть в 2-й среде (например: позиции узлов в сетке)?

И как хранить несколько, похожих, но уникальных, отношений?

P.s: как всегда, я чувствую, что мой английский беден, если что-то непонятно, спросите!

+0

Я чувствую, как работает на Node.js/Neo4j гуманного, Грабал, ты мог повысьте одно из нижележащих разрешений псевдокода, поэтому я знаю, что вы на самом деле ищете? –

+0

Просьба уточнить ваши цели: на какие вопросы вы попытаетесь ответить, используя этот gaph? –

ответ

1

если вы можете назначить свойство ваших отношений, кроме всего типа, вы можете

// создаете строку как свойства реляционных

create (bar) 
    create (bar)-[:contains{order:0]->(b) 
    create (bar)-[:contains{order:1]->(a) 
    create (bar)-[:contains{order:2]->(r) 

// создать пищу как свойства реляционных

create (food) 
    create (food)-[:contains{order:0]->(f) 
    create (food)-[:contains{order:1]->(o) 
    create (food)-[:contains{order:2]->(o) 
    create (food)-[:contains{order:3]->(d) 

Это поддерживается Neo4j, считая, что псевдо-код не может использоваться сразу

0

Возможно, опрятных решение заключается в использовании связанных списков

// создать строку, как связанный список

create (ar)-[:start]->(a) 
    create (ar)-[:proceed]->(r) 
    create (bar)-[:start]->(b) 
    create (bar)-[:proceed]->(ar) 

// создать еду как связанный список

create (od)-[:start]->(o) 
    create (od)-[:proceed]->(d) 
    create (ood)-[:start]->(o) 
    create (ood)-[:proceed]->(od) 
    create (food)-[:start]->(f) 
    create (food)-[:proceed]->(ood) 
1

Это типичный пример связанных списков на графиках, предположим слово cool, он может храниться следующим образом:

(word:Word {name:"cool"})-[:FIRST]->(c)-[:NEXT]->(o)-[:NEXT]->(o)-[:NEXT]->(l)<-[:LAST]-(word) 

Это представление может помочь вам имея представление о письмах, как:

  • В каком положении буква о является наиболее помещенные

  • Все слова, имеющие комбинацию оол буквы

  • Получить все слова, начиная с "все"

Здесь Neo4j консоль с его графическим представлением http://console.neo4j.org/r/uzwded

Вставки запросом, в случае проблем консоли:

MERGE (cool:Word {name:'cool'}) 
MERGE (fool:Word {name:'fool'}) 
MERGE (cold:Word {name:'cold'}) 
CREATE (cool)-[:FIRST]->(:Letter {name:'c'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})<-[:LAST]-(cool) 
CREATE (fool)-[:FIRST]->(:Letter {name:'f'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})<-[:LAST]-(fool) 
CREATE (cold)-[:FIRST]->(:Letter {name:'c'})-[:NEXT]->(:Letter {name:'o'})-[:NEXT]->(:Letter {name:'l'})-[:NEXT]->(:Letter {name:'d'})<-[:LAST]-(cold) 
+0

Как вы представляете «холодный», «холодный» и «дурак» на одном графике, Кристоф? –

+0

Просто так: http://console.neo4j.org/r/uzwded –

+0

К сожалению, Кристоф, вы понимаете, что создали в своей модели около десятка «o» -нодов? Далее: я не вижу связи между словами, имеющими общие письма, которые, я полагаю, необходимы для Грабала. –

Смежные вопросы