Skip to content

pgvector/pgvector-julia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pgvector-julia

pgvector examples for Julia

Supports LibPQ.jl

Build Status

Getting Started

Follow the instructions for your database library:

LibPQ.jl

Enable the extension

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

Create a table

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

Insert vectors

module Pgvector
    convert(v::AbstractVector{T}) where T<:Real = string("[", join(v, ","), "]")
end

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

Get the nearest neighbors

embedding = Pgvector.convert([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

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-julia.git
cd pgvector-julia
createdb pgvector_julia_test
julia --project=. -e "using Pkg; Pkg.instantiate()"
julia --project=. LibPQ/example.jl

About

pgvector examples for Julia

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages