{"id":19431948,"url":"https://github.com/naskio/daar_4_bookfinder","last_synced_at":"2026-04-13T04:33:24.488Z","repository":{"id":81209419,"uuid":"334614545","full_name":"naskio/DAAR_4_BookFinder","owner":"naskio","description":"Search engine for free books","archived":false,"fork":false,"pushed_at":"2021-02-08T21:09:17.000Z","size":12304,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-25T06:16:28.329Z","etag":null,"topics":["docker","docker-compose","gutenberg","mongodb","neo4j","react","redux","search-engine"],"latest_commit_sha":null,"homepage":"https://naskio.github.io/DAAR_4_BookFinder/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/naskio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-01-31T09:08:43.000Z","updated_at":"2023-10-02T07:12:31.000Z","dependencies_parsed_at":"2023-07-11T11:01:33.786Z","dependency_job_id":null,"html_url":"https://github.com/naskio/DAAR_4_BookFinder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/naskio/DAAR_4_BookFinder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naskio%2FDAAR_4_BookFinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naskio%2FDAAR_4_BookFinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naskio%2FDAAR_4_BookFinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naskio%2FDAAR_4_BookFinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naskio","download_url":"https://codeload.github.com/naskio/DAAR_4_BookFinder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naskio%2FDAAR_4_BookFinder/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268378965,"owners_count":24240907,"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","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["docker","docker-compose","gutenberg","mongodb","neo4j","react","redux","search-engine"],"created_at":"2024-11-10T14:33:20.619Z","updated_at":"2025-10-13T09:47:30.988Z","avatar_url":"https://github.com/naskio.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DAAR Project A: Book Finder\n\n![Alt text](frontend/src/assets/images/logo_text.png?raw=true \"Book Finder\")\n\n![Alt text](UIs/web/1.png?raw=true \"Home\")\n![Alt text](UIs/mobile/4.jpeg?raw=true \"Mobile App\")\n\nSearch Engine for free books (gutenberg.org).\n\n* [Introduction](#Introduction)\n\n    * [Features](#Features)\n    * [Quick Links](#Quick-Links)\n    * [DataSet](#dataset)\n\n* [Getting started](#getting-started) (Instructions to build and run the project)\n    * [Requirements](#requirements)\n    * [Configure](#configure)\n    * [build](#build)\n    * [Run](#run)\n\n* [Docker Architecture](#docker-architecture)\n    * [MongoDB](#mongodb)\n    * [Neo4j](#neo4j)\n* [Code Structure](#code-structure)\n* [User Interfaces](#user-interfaces)\n* [About](#about)\n\n## Introduction\n\nBook Finder is a Search Engine that helps you find free books quickly and recommend you similar books.\n\n### Features\n\n- Indexing Books from online library (gutenberg.org or another source).\n- Search a book by a keyword.\n- Search a book by a regular expression.\n- The search results are sorted by relevancy.\n- Get recommendations (Similar books).\n- Auto-correct: the system suggests automatically a keyword when you search for a keyword that doesn't match.\n- REST APIs that can be used with other clients.\n\n### Quick Links\n\nThese are a shortcuts to help you access the Application quickly.\n\n- [Book Finder](http://localhost:3000/)\n- [REST APIs (Swagger Docs)](http://localhost:8000/api/swagger/)\n- [REST APIs](http://localhost:8000/api/)\n\n### DataSet\n\nThe system supports indexing books from ```gutenber.org``` (it can be expanded easily to cover more libraries).\n\n## Getting started\n\nThese instructions will get you a copy of the project up and running on your local machine or in a production server.\n\n### Requirements\n\nTo make the system independent of the environment and make it easier for you to run it, we are using Docker.\n\n1. [Docker or Docker Desktop](https://www.docker.com) (Docker engine 19+ with Docker compose).\n\n### Configure\n\nAfter cloning the repository, we start by configuring the environment:\n\n1. Rename ```.env_example``` to ```.env``` or create an ```.env``` file in the root folder (same folder\n   as ```docker-compose.yaml``` file) and copy the content of ```.env_example``` to ```.env``` file.\n1. Optionally Customize the variables according to your preferences.\n\n### Build\n\n1. We start by building the images using the command\n    ```shell script\n    docker-compose build\n    ```\n1. Run the project\n    ```shell script\n    docker-compose up\n    ```\n1. Open a new tab in the terminal and run the migrations using the command\n    ```shell script\n    docker-compose run web python manage.py migrate\n    ```\n1. then index some books from gutenberg.org (change the parameter n to change the number of books)\n    ```shell script\n    docker-compose run web python manage.py collect_data --n 10\n    ```\n1. Calculate the Jaccard's Graph\n    ```shell script\n    docker-compose run web python manage.py calculate_graph \n    ```\n1. Calculate the Centrality Ranks (Betweenness Centrality)\n    ```shell script\n    docker-compose run web python manage.py calculate_centrality\n    ```\n\n### Run\n\n- To run the system\n    ```shell script\n    docker-compose up\n    ```\n- To shut down the system (from another tab)\n    ```shell script\n    docker-compose down\n    ```\n\n## Docker Architecture\n\nThe application consists of 4 containers:\n\n1. *mongodb* where the MongoDB instance is running.\n1. *neo4j* where the neo4j instance is running.\n1. *web* where the backend server is running.\n1. *frontend* server to serve the React App.\n\n\u003e MongoDB will persist data on ```./mongodb_data/``` folder (mounted-host volume).\n\n\u003e Neo4j will persist data on ```./neo4j_data/``` folder (mounted-host volume).\n\n### MongoDB\n\nWe use MongoDB to store the books meta-data and the index table (keywords -\u003e books).\n\n### Neo4j\n\nWe use neo4j to store the Jaccard's Graph.\n\n## Code Structure\n\n- frontend: contains the code of the Web App (which is also available as PWA) using React and Redux.\n- backend: contains the code of search engine, using Django and Django Rest Framework.\n\n## User Interfaces\n\nAfter indexing some books, we can test the Search Engine\n\n1. Search by keyword\n   ![Alt text](UIs/web/3.png?raw=true \"Search By Keyword\")\n\n1. Search results\n   ![Alt text](UIs/web/4.png?raw=true \"Search results\")\n\n1. Search by regex\n   ![Alt text](UIs/web/6.png?raw=true \"Search by regex\")\n\n1. Auto-complete\n   ![Alt text](UIs/web/2.png?raw=true \"Auto-complete\")\n\n1. Auto-correct\n   ![Alt text](UIs/web/11.png?raw=true \"Auto-correct\")\n\n1. book\n   ![Alt text](UIs/web/5.png?raw=true \"Book details\")\n\n1. similar books\n   ![Alt text](UIs/web/9.png?raw=true \"Similar books\")\n\n1. Mobile App (PWA)\n\n    1. Add to Home Screen\n\n       ![Alt text](UIs/mobile/1.jpeg?raw=true \"Add to Home Screen\")\n\n    1. Icon\n\n       ![Alt text](UIs/mobile/2.jpeg?raw=true \"Home Screen\")\n\n    1. PWA\n\n       ![Alt text](UIs/mobile/3.jpeg?raw=true \"Book Finder PWA\")\n\n## About\n\nTeam: Mehdi Nassim KHODJA, Qiwei XIAN, Adel EL AMRAOUI\n\nDeveloped by students at Sorbonne University, just for learning purposes (part of DAAR lectures). Using Python with\nDjango, MongoDB, Neo4j, React, Redux and Docker.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaskio%2Fdaar_4_bookfinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaskio%2Fdaar_4_bookfinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaskio%2Fdaar_4_bookfinder/lists"}