Index: src/main/java/it/finki/tinki/service/impl/SkillServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/SkillServiceImpl.java	(revision 297bd16e19a43adf781d79489486d95db5de4237)
+++ src/main/java/it/finki/tinki/service/impl/SkillServiceImpl.java	(revision f067338250f079f3984e5fb2760b5bb372234918)
@@ -29,3 +29,7 @@
         return list;
     }
+
+    public List<Skill> returnBasedOnText(String text){
+        return this.skillRepository.findAllByNameContaining(text);
+    }
 }
Index: src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision 297bd16e19a43adf781d79489486d95db5de4237)
+++ src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision f067338250f079f3984e5fb2760b5bb372234918)
@@ -7,4 +7,9 @@
 import it.finki.tinki.model.Skill;
 import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.Work.Work;
+import it.finki.tinki.model.dto.response.work.InternshipResponseDTO;
+import it.finki.tinki.model.dto.response.work.JobResponseDTO;
+import it.finki.tinki.model.dto.response.work.ProjectResponseDTO;
+import it.finki.tinki.model.dto.response.work.WorkResponseDTO;
 import it.finki.tinki.model.enumerator.AccountType;
 import it.finki.tinki.repository.*;
@@ -15,6 +20,5 @@
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 @Service
@@ -125,3 +129,81 @@
         return jb;
     }
+
+    @Override
+    public List<JobResponseDTO> fullTextJobSearch(String text) {
+        List<Skill> skills = this.skillService.returnBasedOnText(text);
+
+        List<Job> jobs = this.jobRepository.findAllByTitleContainsOrDescriptionContains(text,text);
+        List<Job> sjob = new ArrayList<>();
+
+        skills.forEach(skill -> {
+            sjob.addAll(this.jobRepository.findAllBySkillsRequiredContaining(skill));
+        });
+
+        sjob.forEach(job -> {
+            if(!jobs.contains(job)){
+                jobs.add(job);
+            }
+        });
+
+        List<JobResponseDTO> jobs2 = new ArrayList<>();
+
+        jobs.forEach(job -> {
+            jobs2.add(new JobResponseDTO(job));
+        });
+
+        return jobs2;
+    }
+
+    @Override
+    public List<InternshipResponseDTO> fullTextInternshipSearch(String text) {
+        List<Skill> skills = this.skillService.returnBasedOnText(text);
+
+        List<Internship> jobs = this.internshipRepository.findAllByTitleContainsOrDescriptionContains(text,text);
+        List<Internship> sjob = new ArrayList<>();
+
+        skills.forEach(skill -> {
+            sjob.addAll(this.internshipRepository.findAllBySkillsTrainedContaining(skill));
+        });
+
+        sjob.forEach(job -> {
+            if(!jobs.contains(job)){
+                jobs.add(job);
+            }
+        });
+
+        List<InternshipResponseDTO> jobs2 = new ArrayList<>();
+
+        jobs.forEach(job -> {
+            jobs2.add(new InternshipResponseDTO(job));
+        });
+
+        return jobs2;
+    }
+
+    @Override
+    public List<ProjectResponseDTO> fullTextProjectSearch(String text) {
+        List<Skill> skills = this.skillService.returnBasedOnText(text);
+
+        List<Project> jobs = this.projectRepository.findAllByTitleContainsOrDescriptionContains(text,text);
+        List<Project> sjob = new ArrayList<>();
+
+        skills.forEach(skill -> {
+            sjob.addAll(this.projectRepository.findAllBySkillsRequiredContaining(skill));
+        });
+
+        sjob.forEach(job -> {
+            if(!jobs.contains(job)){
+                jobs.add(job);
+            }
+        });
+
+        List<ProjectResponseDTO> jobs2 = new ArrayList<>();
+
+        jobs.forEach(job -> {
+            jobs2.add(new ProjectResponseDTO(job));
+        });
+
+        return jobs2;
+    }
 }
