2014-09-15 2 views
0

Я новичок в Gremlin. Пила Answer from stephen mallette и вот код из того же ответаНужно уточнить запрос гремлина

g.v('u1','u2').out('like').groupCount().cap.next().sort{-it.value} 

Как можно улучшить этот запрос для сортировки продукта, имеющий type=Camera на основе подобных. Рассмотрите пейджинг с 10 записями на страницу. Будет ли это эффективным решением показать отсортированный результат с большим количеством продуктов?

ответ

0

Вам действительно нужно просто применить фильтр, чтобы получить тип продукта вы хотите:

g.v('u1','u2').out('like').has('type','camera').groupCount().cap.next().sort{-it.value} 

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

Поскольку вы используете Titan, у вас есть больше возможностей, чем большинство графиков для решения этой проблемы (если это действительно проблема, я предлагаю вам генерировать тестовые данные и писать некоторые запросы, чтобы убедиться в этом). Одна вещь, которую вы можете сделать, - денормализовать свойство «type» на «похожий» край, чтобы вы могли применить свой фильтр «type» на outE, в отличие от принудительного обхода по сравнению с out, как показано выше (заставляя средства обхода Titan необходимо найти вершина на другом конце края, которая добавляет к количеству данных, которые должен получить Титан). Вы можете узнать больше об этих опциях here.

+0

Я говорю, что я должен использовать край «как», только не «тип» на нем –

+0

ну, я думал, что у вас есть «тип» на вершине «продукта». если вы денормализуете «тип» на «понравившемся» краю, как я и предложил, вы бы сделали что-то большее: 'gv ('u1', 'u2'). outE ('like'). has ('type', 'camera ') .inV.groupCount(). cap.next(). sort {-it.value} ' –

+0

Я попробую это. В титане я был usgin throug java, и я видел, что он немного усложняет запрос, сопоставляемый с грамнитом. например, pipe.start (v) .inE ("inEdge"). имеет ("inEdgeProperty", "XXXXX"). outV(). имеет ('vertexProps''xyz') 'в Титане, используя java first' v.query () .direction (Direction.IN) .labels ("inEdge"). имеет ("inEdgeProperty", "XXXXX"). vertices(). Итератор() 'затем перебирает его отдельно для' has ('vertexProps''xyz') ' –

Смежные вопросы