{"id":29492598,"url":"https://github.com/hrishabh3829/course-search-spring","last_synced_at":"2026-05-15T12:34:20.889Z","repository":{"id":304666284,"uuid":"1019511846","full_name":"Hrishabh3829/Course-Search-Spring","owner":"Hrishabh3829","description":"Course Search Backend (Spring Boot + Elasticsearch)","archived":false,"fork":false,"pushed_at":"2025-07-14T13:05:45.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-14T16:52:00.499Z","etag":null,"topics":["spring-boot","springweb"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hrishabh3829.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-14T12:47:08.000Z","updated_at":"2025-07-14T13:05:48.000Z","dependencies_parsed_at":"2025-07-14T16:52:05.789Z","dependency_job_id":"d2023fe2-6349-4902-b011-91cfb54b3c90","html_url":"https://github.com/Hrishabh3829/Course-Search-Spring","commit_stats":null,"previous_names":["hrishabh3829/course-search-spring"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Hrishabh3829/Course-Search-Spring","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrishabh3829%2FCourse-Search-Spring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrishabh3829%2FCourse-Search-Spring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrishabh3829%2FCourse-Search-Spring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrishabh3829%2FCourse-Search-Spring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hrishabh3829","download_url":"https://codeload.github.com/Hrishabh3829/Course-Search-Spring/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrishabh3829%2FCourse-Search-Spring/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265443209,"owners_count":23766367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["spring-boot","springweb"],"created_at":"2025-07-15T15:27:54.693Z","updated_at":"2026-05-15T12:34:20.834Z","avatar_url":"https://github.com/Hrishabh3829.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003c!--   \u003ctitle\u003eCourse Search Backend - Documentation\u003c/title\u003e --\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n  \u003ch1\u003e🎯 Course Search Backend (Spring Boot + Elasticsearch)\u003c/h1\u003e\n  \u003cp\u003eThis is a lightweight backend application for searching and filtering courses using \u003cstrong\u003eElasticsearch\u003c/strong\u003e. It supports full-text search, autocomplete, and optional fuzzy matching — built with \u003cstrong\u003eSpring Boot\u003c/strong\u003e, \u003cstrong\u003eJava 17\u003c/strong\u003e, and tested using \u003cstrong\u003eTestcontainers\u003c/strong\u003e.\u003c/p\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🚀 Getting Started\u003c/h2\u003e\n    \u003ch3\u003e1. Prerequisites\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003e✅ Java 17\u003c/li\u003e\n      \u003cli\u003e✅ Maven 3+\u003c/li\u003e\n      \u003cli\u003e✅ Docker (for Elasticsearch container)\u003c/li\u003e\n    \u003c/ul\u003e\n\n    2. Clone the Repository\n    git clone https://github.com/your-username/course-search.git\ncd course-search\n\n    3. Start Elasticsearch with Docker Compose\n    docker-compose up -d\n\n    4. Run the Spring Boot Application\n    ./mvnw spring-boot:run\n\n    5. Verify Initialization\n    You should see:\n    👍Courses indexed into Elasticsearch: 50\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e📌 Features\u003c/h2\u003e\n    \u003cul\u003e\n      \u003cli\u003e🔍 Full-text search (title, description, category)\u003c/li\u003e\n      \u003cli\u003e⚡ Autocomplete suggestions (prefix-based)\u003c/li\u003e\n      \u003cli\u003e🤖 Fuzzy matching for typo-tolerance\u003c/li\u003e\n      \u003cli\u003e📝 50 sample courses indexed at startup\u003c/li\u003e\n      \u003cli\u003e🧪 Integration tests using Testcontainers + JUnit 5\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🧱 Tech Stack\u003c/h2\u003e\n    \u003ctable class=\"table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\u003cth\u003eTech\u003c/th\u003e\u003cth\u003eVersion\u003c/th\u003e\u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\u003ctd\u003eJava\u003c/td\u003e\u003ctd\u003e17\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eSpring Boot\u003c/td\u003e\u003ctd\u003e3.2+\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eElasticsearch\u003c/td\u003e\u003ctd\u003e7.17\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eSpring Data ES\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eJackson\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eTestcontainers\u003c/td\u003e\u003ctd\u003e1.19.0\u003c/td\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eJUnit 5\u003c/td\u003e\u003ctd\u003e5.12.2\u003c/td\u003e\u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🗂️ Project Structure\u003c/h2\u003e\n    \u003cpre\u003e\u003ccode\u003esrc/\n├── main/\n│   ├── java/com/example/coursesearch/\n│   │   ├── config/         # Jackson \u0026 other app-level configs\n│   │   ├── controller/     # API endpoints\n│   │   ├── document/       # Elasticsearch @Document definitions\n│   │   ├── repository/     # Spring Data Elasticsearch repositories\n│   │   └── service/        # Business logic (search, indexing)\n│   └── resources/\n│       ├── application.yml\n│       └── sample-courses.json  # Initial 50-course dataset\n└── test/                   # Integration testing with Testcontainers\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🔎 API Endpoints\u003c/h2\u003e\n    \u003ctable class=\"table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\u003cth\u003eEndpoint\u003c/th\u003e\u003cth\u003eMethod\u003c/th\u003e\u003cth\u003eDescription\u003c/th\u003e\u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e/api/search?q=keyword\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eGET\u003c/td\u003e\n          \u003ctd\u003eFull-text search across title, description, category\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e/api/search/suggest?q=term\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eGET\u003c/td\u003e\n          \u003ctd\u003eAutocomplete suggestions using Elasticsearch completion field\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🧪 Running Tests\u003c/h2\u003e\n    \u003cpre\u003e\u003ccode\u003e./mvnw test\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003eThis project uses \u003cstrong\u003eTestcontainers\u003c/strong\u003e to spin up a real Elasticsearch instance. Useful to ensure your logic works on actual Elasticsearch behavior.\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🙌 How to Use This Project\u003c/h2\u003e\n    \u003col\u003e\n      \u003cli\u003eClone the repo\u003c/li\u003e\n      \u003cli\u003eStart Elasticsearch using \u003ccode\u003edocker-compose up -d\u003c/code\u003e\u003c/li\u003e\n      \u003cli\u003eRun the Spring Boot backend using \u003ccode\u003e./mvnw spring-boot:run\u003c/code\u003e\u003c/li\u003e\n      \u003cli\u003eOpen Postman or your browser and hit:\u003c/li\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003ehttp://localhost:9090/api/search?q=math\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003ehttp://localhost:9090/api/search/suggest?q=art\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/ol\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e👍 Contributing\u003c/h2\u003e\n    \u003cp\u003eThis project is beginner-friendly. You are welcome to fork the repo and open PRs for improvements or suggestions.\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e🙏 Acknowledgement\u003c/h2\u003e\n    \u003cp\u003eBuilt as a learning project to explore Spring Boot and Elasticsearch integration. Thanks to the developer community for docs, samples, and support.\u003c/p\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"section\"\u003e\n    \u003ch2\u003e👤 Author\u003c/h2\u003e\n    \u003cp\u003eMaintained by \u003cstrong\u003eHrishabh\u003c/strong\u003e.\u003cbr\u003e\n    Built with passion, patience, and a focus on clean backend design.\u003c/p\u003e\n  \u003c/div\u003e\n\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrishabh3829%2Fcourse-search-spring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhrishabh3829%2Fcourse-search-spring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrishabh3829%2Fcourse-search-spring/lists"}