cache nearest neighbors for each user;
iterate over smaller hashmap when calculating dotp