A full-stack semantic search engine built with Qdrant vector database โ find startups by meaning, not just keywords.
- About the Project
- Features
- Tech Stack
- System Architecture
- Screenshots
- Getting Started
- Using a Larger Dataset (Crunchbase)
- Project Structure
- How Semantic Search Works
- Future Improvements
- Contributing
- License
- Contact
Qdrant Demo is a semantic search engine that goes beyond keyword matching โ it understands the meaning behind your query and returns the most contextually relevant startup results.
Built on top of Qdrant, a high-performance vector similarity search engine, this project demonstrates how to embed natural language queries, store vector representations, and retrieve semantically similar documents at scale โ all running locally via Docker.
๐ก Semantic search finds results based on intent and context, not just exact word matches. Ask "AI-powered productivity tools" and it surfaces relevant startups even if they never use those exact words.
- ๐ง Semantic vector search โ queries matched by meaning using dense embeddings
- ๐ Qdrant vector database โ fast approximate nearest neighbor (ANN) search at scale
- ๐ณ Fully Dockerized โ spin up the entire stack with a single command
- ๐ฆ Poetry dependency management โ reproducible, conflict-free environments
- ๐๏ธ Two dataset options โ lightweight startup JSON or full Crunchbase organizations dataset
- ๐ Web frontend โ clean search UI accessible at
localhost:8000 - โก Real-time results โ sub-second query response for startup discovery
| Layer | Technology |
|---|---|
| Vector Database | Qdrant |
| Backend | Python 3.11 |
| Dependency Mgmt | Poetry |
| Containerization | Docker, Docker Compose |
| Embeddings | Sentence Transformers / OpenAI |
| Dataset | Startups JSON / Crunchbase CSV |
| Frontend | HTML, CSS, JavaScript |
Raw Data (JSON / CSV)
โ
โผ
Text Preprocessing
โ
โผ
Embedding Model โ Dense Vectors
โ
โผ
Qdrant Collection (Vector Index)
โ
โผ
User Query โ Embed Query Vector
โ
โผ
ANN Search (Cosine Similarity)
โ
โผ
Top-K Relevant Startups Returned
โ
โผ
Results Rendered in Web UI
Ensure the following are installed before proceeding:
| Tool | Version | Link |
|---|---|---|
| Python | 3.11 | Download |
| Docker & Docker Compose | Latest | Download |
| pip | Latest | Bundled with Python |
| wget | Any | Install guide |
Follow these steps in order:
Step 1 โ Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # WindowsStep 2 โ Install dependencies with Poetry:
pip install poetry
poetry installStep 3 โ Download the startup dataset:
wget https://storage.googleapis.com/generall-shared-data/startups_demo.json -P data/Step 4 โ Start the Qdrant service via Docker:
docker-compose -f docker-compose-local.yaml upโณ Wait for the Qdrant service to fully start before proceeding to the next step.
Step 5 โ Index the data into Qdrant:
python -m qdrant_demo.init_collection_startupsStep 6 โ Open the application:
http://localhost:8000/
You're ready to search! ๐
For a richer search experience, you can index the full Crunchbase organizations dataset.
โ ๏ธ Requires a free Crunchbase account and API key. Register at crunchbase.com.
Step 1 โ Download the Crunchbase data:
wget 'https://api.crunchbase.com/odm/v4/odm.tar.gz?user_key=<YOUR-CRUNCHBASE-API-KEY>' -O odm.tar.gzStep 2 โ Extract and move the organizations file:
tar -xvf odm.tar.gz
mv odm/organizations.csv ./dataStep 3 โ Index the Crunchbase data into Qdrant:
python -m qdrant_demo.init_collection_crunchbaseThe Crunchbase dataset contains significantly more companies and produces richer, more diverse search results.
qdrant_demo/
โ
โโโ docker-compose-local.yaml # Docker Compose config for local Qdrant instance
โโโ pyproject.toml # Poetry project config & dependencies
โโโ poetry.lock # Locked dependency versions
โ
โโโ qdrant_demo/ # Main application package
โ โโโ __init__.py
โ โโโ init_collection_startups.py # Index startup JSON dataset into Qdrant
โ โโโ init_collection_crunchbase.py# Index Crunchbase CSV into Qdrant
โ โโโ search.py # Semantic search logic & query embedding
โ โโโ app.py # Web server & API routes
โ
โโโ data/ # Dataset directory
โ โโโ startups_demo.json # Default startup dataset
โ โโโ organizations.csv # (Optional) Crunchbase dataset
โ
โโโ static/ # Frontend static assets
โ โโโ css/
โ โโโ js/
โ
โโโ templates/ # HTML templates
โ โโโ index.html
โ
โโโ README.md
Traditional keyword search looks for exact word matches. Semantic search works differently:
| Step | What Happens |
|---|---|
| 1. Embed documents | Each startup description is converted into a dense vector (e.g., 384 or 1536 dimensions) using a sentence embedding model |
| 2. Store in Qdrant | Vectors are indexed in a Qdrant collection optimized for ANN (Approximate Nearest Neighbor) search |
| 3. Embed the query | Your search query is converted into a vector using the same embedding model |
| 4. Similarity search | Qdrant finds the top-K vectors closest to your query vector using cosine similarity |
| 5. Return results | The matching startup records are returned and displayed in the UI |
This means queries like "sustainable energy solutions" will surface relevant startups even if their descriptions use words like "clean tech" or "renewable power" instead.
- Add filters โ search by industry, country, founding year
- Hybrid search โ combine semantic + keyword (BM25) ranking
- Pagination and infinite scroll for large result sets
- REST API with OpenAPI/Swagger documentation
- Dockerize the full application (frontend + backend + Qdrant)
- Support for custom embedding models (OpenAI, Cohere, local models)
- Authentication for multi-user deployments
Contributions are welcome!
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m "Add: your feature description" - Push to your branch:
git push origin feature/your-feature - Open a Pull Request
Please follow PEP 8 style guidelines and add comments for any non-obvious logic.
Distributed under the MIT License. See LICENSE for more information.
Your Name โ ganesh1a0576@gmail.com
GitHub: Ganesh-a0576
Project Link: https://github.com/your-username/qdrant-demo
โญ Found this useful? Give it a star โ it helps others discover the project!
Built with โค๏ธ using Qdrant & Python


