Skip to content

Commit 397a129

Browse files
Merge pull request #10 from KillrVideo/graph_fix
Graph fix
2 parents 8672cea + 15bd8ec commit 397a129

1 file changed

Lines changed: 4 additions & 10 deletions

File tree

killrvideo/suggested_videos/suggested_videos_service.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from .suggested_videos_events_kafka import SuggestedVideosConsumer
22
from dse_graph import DseGraph
33
from gremlin_python.process.graph_traversal import __
4-
from gremlin_python.process.traversal import gte, neq, within, Scope, Operator, Order, Column
4+
from gremlin_python.process.traversal import gte, neq, without, Scope, Operator, Order, Column
55
import logging
66

77
class VideoPreview():
@@ -37,7 +37,6 @@ class SuggestedVideosService(object):
3737
def __init__(self, session):
3838
self.session = session
3939
self.graph = DseGraph.traversal_source(session=self.session, graph_name='killrvideo_video_recommendations')
40-
logging.debug('Graph traversal source: ' + str(self.graph) + ' verts' + str(self.graph.V()))
4140
self.suggested_videos_consumer = SuggestedVideosConsumer(self)
4241

4342

@@ -118,24 +117,19 @@ def get_suggested_for_user(self, user_id, page_size, paging_state):
118117
# - then grab properties of the video and the user who uploaded each video using project()
119118

120119
traversal = self.graph.V().has('user', 'userId', user_id).as_('^user') \
121-
.map(__.out('rated').dedup().fold()).as_('^watchedVideos') \
122-
.select('^user') \
123-
.outE('rated').has('rating', gte(MIN_RATING)).inV() \
124-
.inE('rated').has('rating', gte(MIN_RATING)) \
120+
.outE('rated').sideEffect(__.inV().aggregate('^watchedVideos')) \
121+
.has('rating', gte(MIN_RATING).inV().inE('rated').has('rating'), gte(MIN_RATING)) \
125122
.sample(NUM_RATINGS_TO_SAMPLE).by('rating').outV() \
126123
.where(neq('^user')) \
127124
.local(__.outE('rated').has('rating', gte(MIN_RATING)).limit(LOCAL_USER_RATINGS_TO_SAMPLE)) \
128125
.sack(Operator.assign).by('rating').inV() \
129-
.filter(__.in_('uploaded').hasLabel('user')) \
126+
.where(without('^watchedVideos')) \
130127
.group().by().by(__.sack().sum()) \
131128
.order(Scope.local).by(Column.values, Order.decr) \
132129
.limit(Scope.local, NUM_RECOMMENDATIONS).select(Column.keys).unfold() \
133130
.project('video_id', 'added_date', 'name', 'preview_image_location', 'user_id') \
134131
.by('videoId').by('added_date').by('name').by('preview_image_location').by(__.in_('uploaded').values('userId'))
135132

136-
# TODO: this step needs to be reinserted after .sack and before .filter
137-
#.not_(__.where(within('^watchedVideos'))) \
138-
139133
logging.debug('Traversal: ' + str(traversal.bytecode))
140134

141135
results = traversal.toList()

0 commit comments

Comments
 (0)