// Create Professor Node QUERY create_professor(name: String, title: String, page: String, bio: String ) => professor <- AddN({ name: name, title: title, page: page, bio: bio }) RETURN professor // Create Department Node QUERY create_department(name: String) => department <- AddN({ name: name }) RETURN department // Create University Node QUERY create_university(name: String) => university <- AddN({ name: name }) RETURN university // Create Lab Node QUERY create_lab(name: String, research_focus: String) => lab <- AddN({ name: name, research_focus: research_focus }) RETURN lab // Create Research Area Node QUERY create_research_area(area: String) => research_area <- AddN({ research_area: area }) RETURN research_area // Link Professor to Department QUERY link_professor_to_department(professor_id: ID, department_id: ID) => professor <- N(professor_id) department <- N(department_id) edge <- AddE::From(professor)::To(department) RETURN edge // Link Professor to University QUERY link_professor_to_university(professor_id: ID, university_id: ID) => professor <- N(professor_id) university <- N(university_id) edge <- AddE::From(professor)::To(university) RETURN edge // Link Professor to Lab QUERY link_professor_to_lab(professor_id: ID, lab_id: ID) => professor <- N(professor_id) lab <- N(lab_id) edge <- AddE::From(professor)::To(lab) RETURN edge // Link Professor to Research Area QUERY link_professor_to_research_area(professor_id: ID, research_area_id: ID) => professor <- N(professor_id) research_area <- N(research_area_id) edge <- AddE::From(professor)::To(research_area) RETURN edge // Search Similar Professors based on Research Area + Description Embedding QUERY search_similar_professors_by_research_area_and_description(query_vector: [F64], k: I64) => vecs <- SearchV(query_vector, k) professors <- vecs::In RETURN professors // Get the actual string data of a professor's research area given professor ID QUERY get_professor_research_areas_with_descriptions(professor_id: ID) => research_areas <- N(professor_id)::Out::{areas_and_descriptions: areas_and_descriptions} RETURN research_areas QUERY create_research_area_embedding(professor_id: ID, areas_and_descriptions: String, vector: [F64]) => professor <- N(professor_id) research_area <- AddV(vector, { areas_and_descriptions: areas_and_descriptions }) edge <- AddE::From(professor)::To(research_area) RETURN research_area // GET Queries // QUERY get_professors_by_university_name(university_name: String) => professors <- N::Out::WHERE(_::{name}::EQ(university_name)) RETURN professors QUERY get_professor_by_research_area_name(research_area_name: String) => professors <- N::Out::WHERE(_::{research_area}::EQ(research_area_name)) RETURN professors QUERY get_professors_by_department_name(department_name: String) => professors <- N::Out::WHERE(_::{name}::EQ(department_name)) RETURN professors