bool SearchService::InfluenceSearchByGroup(const string& input, string& output) { EntitySearchRequest request; request.ParseFromString(input); InfluenceSearchResponse response; auto gid = stoi(request.query()); response.set_entity_id(gid); auto vit = pminer->g->Vertices(); vit->MoveTo(gid); for (auto eit = vit->OutEdges(); eit->Alive(); eit->Next()) { if (eit->TypeName() == "GroupInfluence") { auto gi = parse<GroupInfluence>(eit->Data()); Influence *inf = response.add_influence(); inf->set_id(eit->TargetId()); inf->set_topic(gi.topic); inf->set_score(gi.score); } } for (auto eit = vit->InEdges(); eit->Alive(); eit->Next()) { if (eit->TypeName() == "GroupInfluence") { auto gi = parse<GroupInfluence>(eit->Data()); Influence *inf = response.add_influenced_by(); inf->set_id(eit->SourceId()); inf->set_topic(gi.topic); inf->set_score(gi.score); } } return response.SerializeToString(&output); }
SERVICE(InfluenceSearchByAuthor, EntitySearchRequest, InfluenceSearchResponse) { auto aid = stoi(request.query()); response.set_entity_id(aid); auto vit = ig->g->Vertices(); vit->MoveTo(aid); for (auto eit = vit->OutEdges(); eit->Alive(); eit->Next()) { if (eit->TypeName() == "Influence") { auto ai = parse<AuthorInfluence>(eit->Data()); Influence *inf = response.add_influence(); inf->set_id(eit->TargetId()); inf->set_topic(ai.topic); inf->set_score(ai.score); } } for (auto eit = vit->InEdges(); eit->Alive(); eit->Next()) { if (eit->TypeName() == "Influence") { auto ai = parse<AuthorInfluence>(eit->Data()); Influence *inf = response.add_influenced_by(); inf->set_id(eit->SourceId()); inf->set_topic(ai.topic); inf->set_score(ai.score); } } return true; }