-
-
Save angryTit/e0d1e18c0074cc8549b053709f63efdf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GraphTraversalSource traversal = titanGraph.traversal(); | |
long startSimilarQuery = System.currentTimeMillis(); | |
List<Vertex> similars = traversal.V() | |
.has(USER_LABEL, USER_ID_PROPERTY, userId) | |
.outE(SIMILAR_RELATIONSHIP) | |
.order() | |
.by(new Comparator<Edge>() { | |
@Override | |
public int compare(Edge o1, Edge o2) { | |
Integer similarO1 = (Integer) o1.property(SIMILAR_WEIGHT_RELATIONSHIP_PROPERTY).value(); | |
Integer similarO2 = (Integer) o2.property(SIMILAR_WEIGHT_RELATIONSHIP_PROPERTY).value(); | |
return (-1) * similarO1.compareTo(similarO2); | |
} | |
}) | |
.inV() | |
.toList(); | |
long endSimilarQuery = System.currentTimeMillis(); | |
log.info("Stats : Fetch similars query tooks : {} with result size : {}", | |
endSimilarQuery - startSimilarQuery, similars.size()); | |
if (similars.isEmpty()) { | |
log.info("There is no similar users for user with id : {}", userId); | |
return emptyList(); | |
} | |
long startKnowPersonsQuery = System.currentTimeMillis(); | |
Set knownPersonIds = traversal.V() | |
.has(USER_LABEL, USER_ID_PROPERTY, userId) | |
.out() | |
.properties(USER_ID_PROPERTY) | |
.value() | |
.toSet(); | |
long endKnowPersonsQuery = System.currentTimeMillis(); | |
log.info("Stats : Fetch known person query tooks : {} with result size : {}", | |
endKnowPersonsQuery - startKnowPersonsQuery, knownPersonIds.size()); | |
log.info("User knows {} persons", knownPersonIds.size()); | |
long startSimilarIteration = System.currentTimeMillis(); | |
List recoList = new ArrayList(); | |
for (Vertex each : similars) { | |
if (recoList.size() < limit) { | |
GraphTraversal<Vertex, Vertex> simTraversal = | |
traversal | |
.V(each.id()) | |
.out(LIKE_RELATIONSHIP, MATCH_RELATIONSHIP) | |
.has(USER_LABEL, USER_HIDDEN_PROPERTY, false); | |
if (nonNull(gender) && ( | |
Objects.equals(gender.toLowerCase(), "male")) || | |
Objects.equals(gender.toLowerCase(), "female") | |
) { | |
simTraversal = simTraversal.has(USER_LABEL, USER_GENDER_PROPERTY, gender.toLowerCase()); | |
} | |
GraphTraversal<Vertex, Object> targetTraversal = | |
simTraversal.properties(USER_ID_PROPERTY).value(); | |
while (targetTraversal.hasNext() && recoList.size() < limit) { | |
Object candidateUserId = targetTraversal.next(); | |
if (!knownPersonIds.contains(candidateUserId)) { | |
recoList.add(candidateUserId); | |
} | |
} | |
} | |
} | |
long endSimilarIteration = System.currentTimeMillis(); | |
log.info("Stats : Similar iteration tooks : {} with result size : {}", | |
endSimilarIteration - startSimilarIteration, recoList.size()); | |
log.info("Result recommendation list size : {} for user id : {}", recoList.size(), userId); | |
return recoList; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment