gremlin python - получить идентификаторы ребер как простой список вместо словаря - PullRequest
0 голосов
/ 09 мая 2020

При использовании gremlin python, возможно ли только вернуть список идентификаторов для ребер вместо того, чтобы возвращать этот длинный словарь?

Итак, в настоящее время возвращается g.E().limit(10).id().toList() это:

[{'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '4g09-20qw-2dx-1l1c'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5hxx-9x9k-2dx-4qo8'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': 'cljk-qikg-2dx-pzls'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '4vth-1xns-2dx-8940'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5f61-bex4-2dx-sgw'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5xc3-ag48-2dx-a6og'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5xc6-4awg-2dx-f6v4'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': 'bwnk-k0ow-2dx-7dio'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5lhi-pbk-2dx-2wfc'}},
 {'@type': 'janusgraph:RelationIdentifier',
  '@value': {'relationId': '5d6x-avyg-2dx-7gns'}}]

Но вместо этого я хочу, чтобы он возвращал это:

['4g09-20qw-2dx-1l1c', '5hxx-9x9k-2dx-4qo8', 'cljk-qikg-2dx-pzls', '4vth-1xns-2dx-8940', '5f61-bex4-2dx-sgw', '5xc3-ag48-2dx-a6og', '5xc6-4awg-2dx-f6v4', 'bwnk-k0ow-2dx-7dio', '5lhi-pbk-2dx-2wfc', '5d6x-avyg-2dx-7gns']

Это работает должным образом в консоли gremlin.

Python3 .7, gremlinpython == 3.4.2

1 Ответ

2 голосов
/ 12 мая 2020

JanusGraph сериализует RelationIdentifier в Map - вы можете увидеть здесь код . Этот результат отличается от того, что вы получаете в Gremlin Console, потому что консоль использует специальный сериализатор «ToString», который просто вызывает метод toString() для каждого элемента результата, отправленного ему обратно с сервера.

Самый простой обходной путь, который я могу придумать, - это написать собственный десериализатор для «janusgraph: RelationIdentifier» в Python, а затем добавить его в список десериализаторов для версии GraphSON ты используешь. Я не тестировал это, но полагаю, что код будет выглядеть примерно так:

class RelationIdentifierJanusDeserializer(_GraphSONTypeIO):
    graphson_type = "janusgraph:RelationIdentifier"

    @classmethod
    def objectify(cls, d, reader):
        return str(d)

Вот тест, демонстрирующий, как добавить собственный сериализатор и как его заменить:

https://github.com/apache/tinkerpop/blob/5c91324afeedf7e233c93181423fea285a76d1d1/gremlin-python/src/main/python/tests/structure/io/test_graphsonV3d0.py#L255 -L286

...