Как я могу определить, что возвращается из запроса Gremlin? Как вершины или ребра или метки и т. Д. - PullRequest
0 голосов
/ 21 июня 2019

У меня есть приложение Java, которое позволяет пользователю отправлять запросы Gremlin из пользовательского интерфейса, и эти запросы выполняются на бэкэнд-сервере gremlin.

Я хочу знать, что возвращается в ResultSet. Это может быть список вершин или список ребер, а также список строк (может быть и метками). Так что я могу показать правильный интерфейс, относящийся к тому типу возвращаемого объекта.

Нет уверенности в том, что возвращается, просто посмотрите на начальную часть запроса. Например:

g.V() // returns list of Vertices
g.V().outE() // returns list of Edges
g.E().outV() // returns list of Vertices
g.E().outV().label() // returns list of Strings

String query = "g.E().outV().label()";
ResultSet resultSet = client.submit(query);
resultSet.forEach(result -> result.getString()); // getString or getVertex or getEdge ???

Анализ всего запроса для идентификации возвращаемого объекта не является интеллектуальным и надежным подходом.

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

1 Ответ

0 голосов
/ 21 июня 2019

У вас действительно нет большого выбора, кроме как проверить результат, чтобы увидеть его тип. Результаты Гремлин также не всегда однородны. Например, кто-то может отправить это:

g.V(1).outE().path().
  unfold().
  inject(1, [1L, "xyz", [x:"don't care that this traversal is crazy"]], Double.NaN)

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

Если вы отключите сериализацию Gryo (я предполагаю, что вы используете ее в качестве значения по умолчанию для client) для GraphSON, вы получите более ограниченный набор типов, на который можно рассчитывать. Вы можете увидеть их в документации IO .

...