mirror of
https://github.com/pgvector/pgvector.git
synced 2026-06-06 05:51:21 +08:00
Added support for ordering halfvec and sparsevec columns
This commit is contained in:
@@ -223,6 +223,15 @@ CREATE OPERATOR > (
|
|||||||
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS halfvec_ops
|
||||||
|
DEFAULT FOR TYPE halfvec USING btree AS
|
||||||
|
OPERATOR 1 < ,
|
||||||
|
OPERATOR 2 <= ,
|
||||||
|
OPERATOR 3 = ,
|
||||||
|
OPERATOR 4 >= ,
|
||||||
|
OPERATOR 5 > ,
|
||||||
|
FUNCTION 1 halfvec_cmp(halfvec, halfvec);
|
||||||
|
|
||||||
CREATE OPERATOR CLASS halfvec_l2_ops
|
CREATE OPERATOR CLASS halfvec_l2_ops
|
||||||
FOR TYPE halfvec USING ivfflat AS
|
FOR TYPE halfvec USING ivfflat AS
|
||||||
OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops,
|
OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops,
|
||||||
@@ -406,6 +415,15 @@ CREATE OPERATOR > (
|
|||||||
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS sparsevec_ops
|
||||||
|
DEFAULT FOR TYPE sparsevec USING btree AS
|
||||||
|
OPERATOR 1 < ,
|
||||||
|
OPERATOR 2 <= ,
|
||||||
|
OPERATOR 3 = ,
|
||||||
|
OPERATOR 4 >= ,
|
||||||
|
OPERATOR 5 > ,
|
||||||
|
FUNCTION 1 sparsevec_cmp(sparsevec, sparsevec);
|
||||||
|
|
||||||
CREATE OPERATOR CLASS sparsevec_l2_ops
|
CREATE OPERATOR CLASS sparsevec_l2_ops
|
||||||
FOR TYPE sparsevec USING hnsw AS
|
FOR TYPE sparsevec USING hnsw AS
|
||||||
OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops,
|
OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops,
|
||||||
|
|||||||
@@ -526,6 +526,15 @@ CREATE OPERATOR > (
|
|||||||
|
|
||||||
-- halfvec opclasses
|
-- halfvec opclasses
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS halfvec_ops
|
||||||
|
DEFAULT FOR TYPE halfvec USING btree AS
|
||||||
|
OPERATOR 1 < ,
|
||||||
|
OPERATOR 2 <= ,
|
||||||
|
OPERATOR 3 = ,
|
||||||
|
OPERATOR 4 >= ,
|
||||||
|
OPERATOR 5 > ,
|
||||||
|
FUNCTION 1 halfvec_cmp(halfvec, halfvec);
|
||||||
|
|
||||||
CREATE OPERATOR CLASS halfvec_l2_ops
|
CREATE OPERATOR CLASS halfvec_l2_ops
|
||||||
FOR TYPE halfvec USING ivfflat AS
|
FOR TYPE halfvec USING ivfflat AS
|
||||||
OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops,
|
OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops,
|
||||||
@@ -725,6 +734,15 @@ CREATE OPERATOR > (
|
|||||||
|
|
||||||
-- sparsevec opclasses
|
-- sparsevec opclasses
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS sparsevec_ops
|
||||||
|
DEFAULT FOR TYPE sparsevec USING btree AS
|
||||||
|
OPERATOR 1 < ,
|
||||||
|
OPERATOR 2 <= ,
|
||||||
|
OPERATOR 3 = ,
|
||||||
|
OPERATOR 4 >= ,
|
||||||
|
OPERATOR 5 > ,
|
||||||
|
FUNCTION 1 sparsevec_cmp(sparsevec, sparsevec);
|
||||||
|
|
||||||
CREATE OPERATOR CLASS sparsevec_l2_ops
|
CREATE OPERATOR CLASS sparsevec_l2_ops
|
||||||
FOR TYPE sparsevec USING hnsw AS
|
FOR TYPE sparsevec USING hnsw AS
|
||||||
OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops,
|
OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops,
|
||||||
|
|||||||
20
test/expected/btree_halfvec.out
Normal file
20
test/expected/btree_halfvec.out
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
SET enable_seqscan = off;
|
||||||
|
CREATE TABLE t (val halfvec(3));
|
||||||
|
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||||
|
CREATE INDEX ON t (val);
|
||||||
|
SELECT * FROM t WHERE val = '[1,2,3]';
|
||||||
|
val
|
||||||
|
---------
|
||||||
|
[1,2,3]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY val;
|
||||||
|
val
|
||||||
|
---------
|
||||||
|
[0,0,0]
|
||||||
|
[1,1,1]
|
||||||
|
[1,2,3]
|
||||||
|
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
20
test/expected/btree_sparsevec.out
Normal file
20
test/expected/btree_sparsevec.out
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
SET enable_seqscan = off;
|
||||||
|
CREATE TABLE t (val sparsevec(3));
|
||||||
|
INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL);
|
||||||
|
CREATE INDEX ON t (val);
|
||||||
|
SELECT * FROM t WHERE val = '{1:1,2:2,3:3}/3';
|
||||||
|
val
|
||||||
|
-----------------
|
||||||
|
{1:1,2:2,3:3}/3
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY val;
|
||||||
|
val
|
||||||
|
-----------------
|
||||||
|
{}/3
|
||||||
|
{1:1,2:1,3:1}/3
|
||||||
|
{1:1,2:2,3:3}/3
|
||||||
|
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
@@ -8,10 +8,13 @@ SELECT * FROM t WHERE val = '[1,2,3]';
|
|||||||
[1,2,3]
|
[1,2,3]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT * FROM t ORDER BY val LIMIT 1;
|
SELECT * FROM t ORDER BY val;
|
||||||
val
|
val
|
||||||
---------
|
---------
|
||||||
[0,0,0]
|
[0,0,0]
|
||||||
(1 row)
|
[1,1,1]
|
||||||
|
[1,2,3]
|
||||||
|
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
10
test/sql/btree_halfvec.sql
Normal file
10
test/sql/btree_halfvec.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
SET enable_seqscan = off;
|
||||||
|
|
||||||
|
CREATE TABLE t (val halfvec(3));
|
||||||
|
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||||
|
CREATE INDEX ON t (val);
|
||||||
|
|
||||||
|
SELECT * FROM t WHERE val = '[1,2,3]';
|
||||||
|
SELECT * FROM t ORDER BY val;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
10
test/sql/btree_sparsevec.sql
Normal file
10
test/sql/btree_sparsevec.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
SET enable_seqscan = off;
|
||||||
|
|
||||||
|
CREATE TABLE t (val sparsevec(3));
|
||||||
|
INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL);
|
||||||
|
CREATE INDEX ON t (val);
|
||||||
|
|
||||||
|
SELECT * FROM t WHERE val = '{1:1,2:2,3:3}/3';
|
||||||
|
SELECT * FROM t ORDER BY val;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
@@ -5,6 +5,6 @@ INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
|||||||
CREATE INDEX ON t (val);
|
CREATE INDEX ON t (val);
|
||||||
|
|
||||||
SELECT * FROM t WHERE val = '[1,2,3]';
|
SELECT * FROM t WHERE val = '[1,2,3]';
|
||||||
SELECT * FROM t ORDER BY val LIMIT 1;
|
SELECT * FROM t ORDER BY val;
|
||||||
|
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
Reference in New Issue
Block a user