Squashed 'vendor/ruvector/' content from commit b64c2172

git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
ruv
2026-02-28 14:39:40 -05:00
commit d803bfe2b1
7854 changed files with 3522914 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
-- IVFFlat Index Access Method Installation
-- ============================================================================
-- Creates the ruivfflat access method for PostgreSQL
-- Compatible with pgvector's ivfflat interface
-- Create access method
CREATE ACCESS METHOD ruivfflat TYPE INDEX HANDLER ruivfflat_handler;
-- Create operator classes for different distance metrics
-- L2 (Euclidean) distance operator class
CREATE OPERATOR CLASS ruvector_ivfflat_l2_ops
FOR TYPE vector USING ruivfflat AS
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops,
FUNCTION 1 ruvector_l2_distance(vector, vector);
-- Inner product distance operator class
CREATE OPERATOR CLASS ruvector_ivfflat_ip_ops
FOR TYPE vector USING ruivfflat AS
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops,
FUNCTION 1 ruvector_ip_distance(vector, vector);
-- Cosine distance operator class
CREATE OPERATOR CLASS ruvector_ivfflat_cosine_ops
FOR TYPE vector USING ruivfflat AS
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops,
FUNCTION 1 ruvector_cosine_distance(vector, vector);
-- Helper function to get IVFFlat index statistics
CREATE OR REPLACE FUNCTION ruvector_ivfflat_stats(index_name text)
RETURNS TABLE(
lists integer,
probes integer,
dimensions integer,
trained boolean,
vector_count bigint,
metric text
)
AS $$
BEGIN
-- This would query the index metadata
-- For now, return dummy data
RETURN QUERY SELECT
100::integer as lists,
1::integer as probes,
0::integer as dimensions,
false::boolean as trained,
0::bigint as vector_count,
'euclidean'::text as metric;
END;
$$ LANGUAGE plpgsql;
-- Example usage:
--
-- CREATE INDEX ON items USING ruivfflat (embedding vector_l2_ops)
-- WITH (lists = 100, probes = 1);
--
-- CREATE INDEX ON items USING ruivfflat (embedding vector_cosine_ops)
-- WITH (lists = 500, probes = 10);
--
-- SELECT * FROM ruvector_ivfflat_stats('items_embedding_idx');