GitHub - pgvector/Pgvector.jl: pgvector support for Julia

pgvector support for Julia

Supports LibPQ.jl

Build Status

Getting Started

Follow the instructions for your database library:

Or check out some examples:

LibPQ.jl

Add the package

Load the package

Enable the extension

execute(conn, "CREATE EXTENSION IF NOT EXISTS vector")

Register the types with your connection

Create a table

execute(conn, "CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))")

Insert vectors

embeddings = [[1, 1, 1], [2, 2, 2], [1, 1, 2]]
LibPQ.load!(
    (embedding = map(Pgvector.Vector, embeddings),),
    conn,
    "INSERT INTO items (embedding) VALUES (\$1)",
)

Get the nearest neighbors

embedding = Pgvector.Vector([1, 1, 1])
result = execute(conn, "SELECT * FROM items ORDER BY embedding <-> \$1 LIMIT 5", [embedding])
columntable(result)

Add an approximate index

execute(conn, "CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)")
# or
execute(conn, "CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)")

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Reference

Vectors

Create a vector

vec = Pgvector.Vector([1, 2, 3])

Get a Vector{Float32}

Half Vectors

Create a half vector

vec = Pgvector.HalfVector([1, 2, 3])

Get a Vector{Float16}

Sparse Vectors

Create a sparse vector

vec = Pgvector.SparseVector(sparsevec([1, 0, 2, 0, 3, 0]))

Get a SparseVector{Float32,Int32}

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/pgvector/Pgvector.jl.git
cd Pgvector.jl
createdb pgvector_julia_test
julia --project=. -e "using Pkg; Pkg.instantiate()"
julia --project=. -e "using Pkg; Pkg.test()"

To run an example:

cd examples/loading
createdb pgvector_example
julia --project=. -e "using Pkg; Pkg.instantiate()"
julia --project=. example.jl