Upsert, as global data replacement, like qdrant and milvus
Update where condition like filter='color like "blue%"'
Delete by filter
by id condition like filter="id in [4,5,6]"
by string filter='color like "blue%"'
# UPDATE table SET ... WHERE id=3;
# INSERT INTO table (id, ...)
# SELECT ...
# WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
# Insert if id doesn't exist, else update
res = client.upsert(
collection_name='quick_setup',
data=data
)
# UPDATE table SET ... WHERE color=pink_8682;
res = client.update(
collection_name='quick_setup',
data= {"vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
filter="color = \"pink_8682\"",
)
# DELETE from quick_setup where id != ANY('{18, 19}'::int[])
res = client.delete(
collection_name="quick_setup",
ids=[18, 19],
)
res = client.delete(
collection_name='quick_setup',
filter='color like "blue%"'
)
# Create iterator
res = client.search_iterator(req, batch_size=10)
results = []
# Iter until end
while True:
result = iterator.next()
if not result:
iterator.close()
break
results.extend(result)
Manage Partitions
Concept
Partitions should be created with schema, before collection is created
Abilities
multi-tenancy: Hash partition
Arbitrary user-id
Data Isolation
Don't care about partition details
User-defined partition: Group & Range
Fine-grained control over partition creation and insertion
from sdk.partition import Partition, Hash, In, Range
# Hash partition - Random split inserted rows
# CREATE TABLE partitionA PARTITION OF documents FOR VALUES FROM WITH (MODULUS 3, REMAINDER 0);
p = Partition(
partition_name="partitionA",
partition_field="id",
partition_by=Hash(3, 0)
)
# Group partition - Split discrete data based on distribution
# CREATE TABLE partitionA PARTITION OF documents FOR VALUES IN ('A', 'B');
p = Partition(
partition_name="partitionA",
partition_field="alpha",
partition_by=In(('A', 'B'))
)
# Range partition - Split continuous data based on distribution
# CREATE TABLE partitionA PARTITION OF documents FOR VALUES FROM ('2023-03-01') TO ('2023-04-01');
p = Partition(
partition_name="partitionA",
partition_field="day"
partition_by=Range('2023-03-01', '2023-04-01')
)
Design of native SDK
Manage Databases
Abilities
Manage Schema
Concept
Supported data types:
str
->TEXT
int
->INTEGER
float
->REAL
datetime
->TIMESTAMP
dict
->jsonb
vector
svector
bvector
vecf16
Column attributes:
Field
VectorField
Abilities
Field
(schema for column)Field
to aSchema
Schema
can have an optionalPartition
Manage Collections
Concept
vector
andid
and$meta
Abilities
Data Insert
Abilities
list[dict[str, Any]]
into collectionUpdate and Delete
Abilities
qdrant
andmilvus
filter='color like "blue%"'
filter="id in [4,5,6]"
filter='color like "blue%"'
Create Index
Concept
L2
/IP
/COS
FLAT
/IVF_FLAT
/HNSW
Abilities
Search
Single-Vector Search
id
anddistance
Hybrid search
Iterative Search
Manage Partitions
Concept
Abilities