This application essentially functions as a miniature, internal version of Google Search for your own documents. It leverages Elasticsearch, a powerful open-source search and analytics engine, to index, search, and manage textual documents.
Tested on:
- OS: macOS 14.2.1
- Python: 3.12.1
- Hardware: Apple M1 with 16GB of RAM
If you prefer to manually install packages, here is the list of packages which you can install:
- elasticsearch==7.13.3
- openai==1.9.0
- fastapi==0.109.2
- uvicorn==0.20.0
- pydantic==1.10.12
Open your terminal or command prompt and navigate to the directory containing the requirements.txt
file. Run the following command to create a new Conda environment. Replace <env_name> with your desired environment name:
conda create --name <env_name> --file requirements.txt
This command will attempt to create a new Conda environment with the name you specified and install all the packages listed in requirements.txt. Note that the platform specified in my requirements file is osx-64, which means this file is intended for my macOS systems. If you are using a different platform (e.g., Linux or Windows), you may need to adjust the package versions or names accordingly.
Before proceeding, ensure you have Docker installed.
The docker-compose.yml
file defines the services required to run Elasticsearch and Kibana.
To launch both Elasticsearch and Kibana, follow these steps:
-
Navigate to the Directory: Ensure your terminal or command prompt is opened in the directory containing the docker-compose.yml file.
-
Start Services: Run the following command to start the services in detached mode:
docker-compose up -d
- The -d flag runs the containers in the background, allowing you to continue using the terminal.
Elasticsearch Service: This service uses the official Elasticsearch image version 7.10.2. It's configured to run as a single-node cluster, suitable for development or lightweight production usage. The service exposes ports 9200 (HTTP) and 9300 (transport) for Elasticsearch.
Kibana Service: This service uses the official Kibana image version 7.10.2, which is designed to work seamlessly with the specified Elasticsearch version. Kibana is accessible via port 5601. It depends on the Elasticsearch service, ensuring Elasticsearch is launched first.
Volumes: A Docker volume named esdata is mounted to /usr/share/elasticsearch/data in the Elasticsearch container. This setup persists the Elasticsearch data, making it resilient across container restarts.
Once the services are running, you can access Kibana by navigating to http://localhost:5601 in your web browser. Kibana provides a user-friendly interface to interact with the Elasticsearch data.
To stop the services and remove the containers, use the following command:
docker-compose down
- Optionally, to remove the data volume and clean up all data, add the -v flag at the end.
To start your FastAPI application with live reloading enabled, open your terminal or command prompt, navigate to the directory containing your main.py file, and run the following command:
uvicorn main:app --reload
Here, main
is the name of your Python file (main.py) without the extension, and app is the name of the FastAPI instance. The --reload
option makes the server restart upon code changes, which is very useful during development.
Once Uvicorn is running, it will display the address where your app is being served, usually http://127.0.0.1:8000. FastAPI generates interactive API documentation using Swagger UI accessible at /docs on your application's root URL. To access it, go to:
http://127.0.0.1:8000/docs