A backend API that converts natural language queries into structured database filters to retrieve user profile data stored in a PostgreSQL database.
This system powers intelligent querying for demographic data, allowing users to search using simple human language like: "young male nigeria", "adult female kenya", etc.
- Natural language query parsing
- Dynamic SQL query builder
- PostgreSQL data persistence
- Advanced filtering (gender, age, country)
- Pagination support
- Sorting support
- RESTful API design
- Duplicate-safe data seeding
- Node.js
- Express.js
- PostgreSQL
- pg (node-postgres)
- dotenv
Intelligence Query Engine/ ├── configs/ │ └── database.js ├── controllers/ │ └── profileController.js ├── services/ │ ├── profileServices.js │ └── queryparserServices.js ├── utility/ │ └── queryBuilder.js ├── routes/ │ └── profileRoutes.js ├── seeds/ │ ├── seed.js │ └── seed_profile.json ├── app.js ├── .env └── package.json
Create a .env file in the root directory:
PORT=8080
DB_USER=postgres
DB_HOST=localhost
DB_NAME=intelligence-query-engine-DB
DB_PASSWORD=your_password
DB_PORT=5432
cd Intelligence Query Engine
-
Install dependencies
npm install -
Setup PostgreSQL database
CREATE DATABASE intelligence-query-engine-DB; -
Ensure PostgreSQL is running on port 5432
-
Seed the database
node seeds/seed.js
Expected output:
Seeding started...
CONNECTED SUCCESSFULLY ✅
Seeding completed successfully 🚀
- Run the server
npm run dev
Server runs on:
http://localhost:8080
Returns all profiles with pagination and sorting support.
Query Params:
- page (default: 1)
- limit (default: 10)
- sort_by (age | created_at | gender_probability)
- order (asc | desc)
Example:
GET /profiles?page=1&limit=10
Search profiles using natural language queries.
Example:
GET /profiles/search?q=young male nigeria
Supported expressions:
- young
- adult
- senior
- male / female
- country names (Nigeria, Kenya, etc.)
- age filters (above 30, below 20)
User Input → Controller → parseQuery → buildQuery → PostgreSQL → Response
Example:
"young male nigeria"
Becomes:
{ gender: "male", min_age: 16, max_age: 24, country_id: "NG" }
- PostgreSQL used for data storage
- pg Pool manages connections
- Parameterized queries prevent SQL injection
- Efficient filtering and indexing support
- Loads data from seed_profile.json
- Inserts profiles into PostgreSQL
- Safe re-run (prevents duplicate records)
Run: node seeds/seed.js
Test using Postman:
ECONNREFUSED
→ Ensure PostgreSQL is running on port 5432
parseQuery is not a function
→ Fix import:
const { parseQuery } = require("../services/queryparserServices");
Yusuf Afolabi
This project is built for educational and assessment purposes (HNG Internship).