Как запустить запрос на совпадение в гремлине. Фильтр запроса не работает в космосе БД с драйвером Java - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть 2 постановки задачи с аналогичным подходом. Могу ли я вставить запрос «содержит» или «похожий» в оба, чтобы решить мою проблему в gremlin:

1) Возвращение вершины «a» в следующем запросе, когда outE () (как показано ниже в запросе Гремлина) имеет ярлык с надписью содержит печать.

gV (). HasLabel ('url'). Has ('name', 'sw10707'). As ('a'). OutE ('print'). Has ('forward', 'states') .inV (). select (' a ')

2) Возвращение всех вершин, как указано ниже, которые содержат печать в их метках ребер:

gV (). hasLabel (' url') .has (' name ',' sw10707 '). as (' a '). outE (' print '). has (' forward ',' states '). inV ()

Этот запросне работает: gV (). hasLabel ('url'). has ('name', 'sw10707'). as ('a'). outE (). filter (it.name.matches ('. pri. '))

Проблема уже открыта с драйвером .net (но я не могу найти подобную функциональность с Java): https://github.com/Azure/azure-cosmosdb-dotnet/issues/473

1 Ответ

0 голосов
/ 17 сентября 2018

Этот обход:

g.V().hasLabel('url').
  has('name','sw10707').as('a').
  outE().filter(it.name.matches('.pri.'))

требует лямбда-выражения в filter() и должен быть записан как закрытие Groovy:

g.V().hasLabel('url').
  has('name','sw10707').
  outE().filter{it.name.matches('.pri.')}

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

Обратите внимание, что я прокомментировал этот вопрос, упомянув, что TinkerPop рассматривает возможность сделать эти текстовые предикаты доступными - обсуждение здесь .

...