Я не уверен, что это все из-за вашей проблемы, но я думаю, что ваш match()
моделирует ваши шаги "displayName", чтобы они были and()
, а не or()
. Вы можете проверить с помощью profile()
, как я сделал здесь с TinkerGraph:
gremlin> g.V().match(__.as('a').has('name','marko'), __.as('a').has('name','josh')).profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TinkerGraphStep(vertex,[name.eq(marko), name.eq... 0.067 100.00
>TOTAL - - 0.067 -
Вы можете решить эту проблему несколькими способами, я полагаю. В моем примере использование within()
, как описано в другом ответе на предыдущий вопрос от вас , прекрасно работает:
gremlin> g.V().match(__.as('a').has('name', within('marko','josh'))).profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TinkerGraphStep(vertex,[name.within([marko, jos... 2 2 0.098 100.00
>TOTAL - - 0.098 -
В вашем случае я бы заменил:
or(has('JournalFixed', 'displayName', textContains('Journal Name 1')),
has('JournalFixed', 'displayName', textContains('Journal Name 2')))
с:
has('JournalFixed', 'displayName', textContains('Journal Name 1').
or(textContains('Journal Name 2'))
с преимущественным использованием P.or()
. Я думаю, что любой из этих вариантов должен быть лучше, чем использовать or()
-этап, но только profile()
от JanusGraph сообщит, как обсуждалось здесь .
Все, что сказал, я бы удивился, почему ваш or()
не может быть переведен непосредственно в match()
следующим образом:
g.V().match(
__.as('a').or(has('Journal', 'displayName', textContains('Journal Name 1')),
has('Journal', 'displayName', textContains('Journal Name 2'))),
__.as('a').inE('PublishedIn').subgraph('sg').outV().as('b'),
__.as('b').has('Paper', 'paperTitle', textContains('My Key word')),
__.as('b').inE('AuthorOf').subgraph('sg').outV().as('c')).
cap('sg')
Я бы даже подумал, что мое предложение о P.or()
значительно более производительный.