tenqz / qdrant
Simple PHP client for Qdrant vector database. Easy-to-use library for storing, searching, and managing vector embeddings in AI and machine learning applications.
Installs: 14
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/tenqz/qdrant
Requires
- php: ^7.2|^8.0
- ext-curl: *
- ext-json: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^8.0|^9.0
- squizlabs/php_codesniffer: ^3.7
README
Qdrant PHP Client
A simple PHP library for Qdrant vector database
๐ About
Qdrant PHP Client is a simple and easy library for working with Qdrant vector database. It helps you store and search vectors (embeddings) for AI and machine learning applications.
Version 1.0.0 includes complete API support for collections, points, search, and recommendations.
โจ Features
- ๐ Easy to use โ Simple API, clear code
- ๐ Vector Search โ Find similar items by vector similarity
- ๐ Batch Operations โ Work with many items at once
- ๐ฏ Filters โ Search with conditions (price, category, etc.)
- ๐ก Recommendations โ Get recommendations based on examples
- ๐งช 100% Tested โ All features have tests
- ๐ PHP 7.2+ โ Works with old and new PHP versions
- โก Fast โ Uses cURL for speed
๐ Requirements
- PHP 7.2 or higher
- Extensions:
ext-curl,ext-json - Qdrant server (local or cloud)
๐ฆ Installation
Install via Composer:
composer require tenqz/qdrant
๐ Quick Start
<?php use Tenqz\Qdrant\QdrantClient; use Tenqz\Qdrant\Transport\Infrastructure\Factory\CurlHttpClientFactory; // 1. Create client $factory = new CurlHttpClientFactory(); $httpClient = $factory->create('localhost', 6333); $client = new QdrantClient($httpClient); // 2. Create collection $client->createCollection('my_collection', 4, 'Cosine'); // 3. Add vectors with data $client->upsertPoints('my_collection', [ ['id' => 1, 'vector' => [0.1, 0.2, 0.3, 0.4], 'payload' => ['city' => 'Berlin']], ['id' => 2, 'vector' => [0.5, 0.6, 0.7, 0.8], 'payload' => ['city' => 'London']], ]); // 4. Search for similar vectors $results = $client->search('my_collection', [0.2, 0.1, 0.9, 0.7], 5);
See examples/basicUsage.php and examples/README.md for complete examples of all features.
๐ API Methods
Collections
| Method | Description | Example |
|---|---|---|
createCollection() |
Create new collection | $client->createCollection('my_vectors', 128, 'Cosine') |
getCollection() |
Get collection info | $client->getCollection('my_vectors') |
listCollections() |
List all collections | $client->listCollections() |
deleteCollection() |
Delete collection | $client->deleteCollection('my_vectors') |
Points Operations
| Method | Description | Example |
|---|---|---|
upsertPoints() |
Add or update points | $client->upsertPoints('my_vectors', $points) |
getPoint() |
Get one point by ID | $client->getPoint('my_vectors', 1) |
getPoints() |
Get multiple points | $client->getPoints('my_vectors', [1, 2, 3]) |
deletePoints() |
Delete points | $client->deletePoints('my_vectors', [1, 2, 3]) |
setPayload() |
Update point metadata | $client->setPayload('my_vectors', ['new' => true], [1, 2]) |
deletePayload() |
Delete metadata fields | $client->deletePayload('my_vectors', ['old_field'], [1, 2]) |
scroll() |
Get points page by page | $client->scroll('my_vectors', 100) |
countPoints() |
Count points | $client->countPoints('my_vectors') |
Search & Recommendations
| Method | Description | Example |
|---|---|---|
search() |
Find similar vectors | $client->search('my_vectors', [0.1, 0.2], 10) |
searchBatch() |
Multiple searches at once | $client->searchBatch('my_vectors', [$query1, $query2]) |
recommend() |
Get recommendations | $client->recommend('my_vectors', [1, 5], [3], 10) |
๐ก Examples
See examples/basicUsage.php for complete examples of:
- Creating collections with different settings
- Adding and updating data
- Vector similarity search
- Search with filters (price, category, etc.)
- Recommendations (like/unlike items)
- Batch operations
- Pagination with scroll
- And more!
Run the example:
php examples/basicUsage.php
๐ก๏ธ Error Handling
use Tenqz\Qdrant\Transport\Domain\Exception\TransportException; use Tenqz\Qdrant\Transport\Domain\Exception\HttpException; use Tenqz\Qdrant\Transport\Domain\Exception\NetworkException; try { $result = $client->search('my_collection', [0.1, 0.2], 10); } catch (HttpException $e) { // HTTP errors (404, 500, etc.) echo "HTTP Error {$e->getStatusCode()}: {$e->getMessage()}\n"; print_r($e->getResponse()); } catch (NetworkException $e) { // Network problems (connection failed, timeout) echo "Network Error: {$e->getMessage()}\n"; } catch (TransportException $e) { // Other transport errors echo "Error: {$e->getMessage()}\n"; }
Error Types
- HttpException โ HTTP errors like 404 Not Found, 500 Server Error
- NetworkException โ Connection problems, timeouts, DNS errors
- SerializationException โ JSON parsing errors
- TransportException โ Base class for all errors (catch-all)
๐งช Testing
Run tests:
composer install
composer test
๐ Documentation
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for detailed guidelines.
Quick steps:
- Fork the repository
- Create a feature branch
- Write tests for new features
- Submit a pull request
๐ License
MIT License. See LICENSE for details.
๐ Contact
Author: Oleg Patsay
Email: smmartbiz@gmail.com
GitHub: tenqz/qdrant
โญ Like this project? Give it a star on GitHub!
