Doctrine Dbal & DQL functions for PgVector

Power up your RAG app with PostgreSQL vector similarity search

$qb = $this->entityManager->createQueryBuilder();
$qb->select('e')
  ->from('App:Embeddings', 'e')
  ->orderBy('distance(e.vectors, :vector)')
  ->setParameter('vector', $floatArray, 'vector')
  ->setMaxResults(5);
$result = $qb->getQuery()->getResult();

Getting Started

Doctrine PgVector

Partitech Doctrine PgVector is a Doctrine extension for integrating PostgreSQL vector types into your PHP projects using Doctrine ORM. This module simplifies using vectors in your database by providing calculation functions such as distance, inner product, and cosine similarity.

📦 Installation

You can install Partitech Doctrine PgVector via Composer:

composer require partitech/doctrine-pgvector

⚙️ Configuration

Add the types and functions to your Doctrine configuration:

doctrine:
    dbal:
        types:
            vector: Partitech\DoctrinePgVector\Type\VectorType
    orm:
        dql:
            string_functions:
                distance: Partitech\DoctrinePgVector\Query\Distance
                inner_product: Partitech\DoctrinePgVector\Query\InnerProduct
                cosine_similarity: Partitech\DoctrinePgVector\Query\CosineSimilarity

🛠️ Usage

Vector Types

Use vector types directly in your Doctrine entities:

/** @Column(type="vector") */
private $vector;

Available DQL Functions

  • distance(vector, vector)
  • inner_product(vector, vector)
  • cosine_similarity(vector, vector)

These functions can be directly used in your Doctrine queries.

📌 Examples

Example query using distance:

$query = $entityManager->createQuery(
    'SELECT e FROM Entity e ORDER BY distance(e.vector, :inputVector) ASC'
);
$query->setParameter('inputVector', [0.1, 0.2, 0.3]);
$result = $query->getResult();

✅ Testing and Development

To run unit tests:

composer test

🤝 Contribution

Contributions are welcome! Check the issues page to start contributing or submit a Pull Request.

📄 License

This project is licensed under the MIT License. See LICENSE for more details.