Граф DSE с одной и той же вершинной частью двух меток вершин?

В моем случае есть две метки вершин: Пользователь, Продавец.

Зарегистрируйте пользователя, создайте новую вершину, используя пользовательский идентификатор вершины:

  g.addV(label,'User', 'id', '123456789', 'name', 'User1').next();

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

Если я создам новую вершину с меткой продавца, то весь граф (имеет мобильный телефон, адрес), хранящийся в пользовательской вершине, не будет доступен с вершиной продавца.

Есть ли способ добиться этого на графике DSE?


person user2572801    schedule 24.05.2017    source источник


Ответы (1)


Семантика TinkerPop и DSE Graph (а также большинства реализаций графа — с Neo4j единственным исключением, которое я могу придумать) не позволяет вершине иметь несколько меток. Вы можете подумать, что причина в том, что у вас не будет строки в нескольких таблицах базы данных SQL.

Есть несколько способов решить эту проблему. Создайте вершину «Человек» (вместо «Пользователь» или «Продавец»), затем:

  1. Сделайте вывод о том, являются ли они «Пользователем» или «Продавцом» по какому-либо аспекту связанных с ними данных. Возможно, это делается с помощью свойства «isSeller» или «isUser». Затем вы запросите продавцов с помощью

    g.V().hasLabel('Person').has('isSeller',true)

  2. Создайте систему подтипа, в которой вы соединяете свою вершину «Человек» с вершиной «Пользователь» или вершиной «Продавец». Затем вы можете делать такие вещи, как «найти пользователя, только если он продавец» с помощью

    g.V().hasLabel('User').has('someid','12345'). filter(__.in('isAPerson').out('isASeller'))

person stephen mallette    schedule 24.05.2017