Vector

Vector datasets allow you to store your own vectors so that they can be efficiently queried later. The dimension of vectors has to match the dimension specified when creating the dataset.

Create a Dataset

Create a dataset with Vector type which tells AnnDB to skip any pre-processing and embedding, and store the vectors as is. The distance metric and dimension cannot be changed later.

In order to manage data in your dataset, create a corresponding dataset instance using the client.

Python
Ruby
Python
dataset = client.vector('<DATASET_NAME>')

Python client accepts either a list of floats or a NumPy array as vectors.

Ruby
dataset = client.vector("<DATASET_NAME>")

Ruby client accepts a list of floats as vectors.

Python
Ruby
Python
result = dataset.search([0.4506, -0.6739, -0.2360, -1.3630, ...], 10)
for item in result:
print(item.id, item.metadata)
Ruby
result = dataset.search([0.4506, -0.6739, -0.2360, -1.3630, ...], 10)
result.each do |item|
puts item.id, item.metadata
end

Insert

Python
Ruby
Python
# Single item
id = dataset.insert(
[0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata={'key': 'value'}
)
# Batch
result = dataset.insert_batch([
anndb_api.VectorItem(
None,
[0.4506, -0.6739, -0.2360, -1.3630, ...],
{'key': 'value'}
),
...
])
for r in result:
print(r.id, r.error)
Ruby
id = dataset.insert(
[0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata={ "key": "value" }
)
result = dataset.insert_batch([
{
vector: [0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata: { "key": "value" }
},
...
])
result.each { |r|
puts r[:id], r[:error]
}

Update

Python
Ruby
Python
# Single item
id = dataset.update(
id,
[0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata={'key': 'value'}
)
# Batch
result = dataset.update_batch([
anndb_api.VectorItem(
id,
[0.4506, -0.6739, -0.2360, -1.3630, ...],
{'key': 'value'}
),
...
])
for r in result:
print(r.id, r.error)
Ruby
id = dataset.update(
id,
[0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata={ "key": "value" }
)
result = dataset.update_batch([
{
id: id,
vector: [0.4506, -0.6739, -0.2360, -1.3630, ...],
metadata: { "key": "value" }
},
...
])
result.each { |r|
puts r[:id], r[:error]
}

Delete

Python
Ruby
Python
# Single item
dataset.delete(id)
# Batch
result = dataset.delete_batch([id, ...])
for r in result:
print(r.id, r.error)
Ruby
dataset.delete(id)
result = dataset.delete_batch([id, ...])
result.each { |r|
puts r[:id], r[:error]
}