in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/salsa/SalsaSelectResults.java [66:124]
public SalsaResponse pickTopNodes() {
int maxNumResults = Math.min(salsaInternalState.getSalsaRequest().getMaxNumResults(),
RecommendationRequest.MAX_RECOMMENDATION_RESULTS);
PriorityQueue<NodeInfo> topResults = new PriorityQueue<NodeInfo>(maxNumResults);
int numFilteredNodes = 0;
for (NodeInfo nodeInfo : salsaInternalState.getVisitedRightNodes().values()) {
if (salsaInternalState.getSalsaRequest().filterResult(
nodeInfo.getNodeId(),
nodeInfo.getSocialProofs())
) {
numFilteredNodes++;
continue;
}
nodeInfo.setWeight(
nodeInfo.getWeight() / salsaInternalState.getSalsaStats().getNumRHSVisits());
addResultToPriorityQueue(topResults, nodeInfo, maxNumResults);
}
List<RecommendationInfo> outputResults =
Lists.newArrayListWithCapacity(topResults.size());
byte[] validSocialProofs = salsaInternalState.getSalsaRequest().getSocialProofTypes();
while (!topResults.isEmpty()) {
NodeInfo nodeInfo = topResults.poll();
outputResults.add(
new TweetRecommendationInfo(
TWEET_ID_MASK.restore(nodeInfo.getNodeId()),
nodeInfo.getWeight(),
pickTopSocialProofs(nodeInfo.getSocialProofs(), validSocialProofs)));
}
Collections.reverse(outputResults);
salsaStats.setNumRightNodesFiltered(numFilteredNodes);
salsaStats.setNumRightNodesReached(salsaInternalState.getVisitedRightNodes().size());
LOG.info("SALSA: after running iterations for request_id = "
+ salsaInternalState.getSalsaRequest().getQueryNode()
+ ", we get numSeedNodes = "
+ salsaStats.getNumSeedNodes()
+ ", numDirectNeighbors = "
+ salsaStats.getNumDirectNeighbors()
+ ", numRHSVisits = "
+ salsaStats.getNumRHSVisits()
+ ", numRightNodesReached = "
+ salsaStats.getNumRightNodesReached()
+ ", numRightNodesFiltered = "
+ salsaStats.getNumRightNodesFiltered()
+ ", minVisitsPerRightNode = "
+ salsaStats.getMinVisitsPerRightNode()
+ ", maxVisitsPerRightNode = "
+ salsaStats.getMaxVisitsPerRightNode()
+ ", numOutputResults = "
+ outputResults.size()
);
return new SalsaResponse(outputResults, salsaStats);
}