管理数据
除了插入和查询数据外,您还可以通过其他方式与Pinecone索引中的向量数据进行交互。本节介绍了可用的各种向量操作。
连接到索引
如果您正在使用Pinecone客户端库访问索引,则需要打开与索引的会话:
下面分别是Python、JavaScript和Curl代码
# Connect to the index
index = pinecone.Index("pinecone-index")
const index = pinecone.Index("pinecone-index");
# Not applicable
指定索引端点
每个Pinecone索引都有自己的DNS终端。对于直接的cURL和其他API调用,您需要知道专用终端的索引。
索引终端采用以下格式:
https://{project-name}-{index-name}.svc.YOUR_ENVIRONMENT.pinecone.io
{index-name}
是创建索引时指定的名称。{project-name}
是与您的API密钥关联的Pinecone项目名称,可以使用下面的whoami
操作来检索。YOUR_ENVIRONMENT
是Pinecone项目的云区域。
调用whoami
以检索您的项目名称。
以下命令检索您的Pinecone项目名称。
下面分别是Python和Curl代码
pinecone.whoami()
curl -i https://controller.YOUR_ENVIRONMENT.pinecone.io/actions/whoami -H 'Api-Key: YOUR_API_KEY'
描述索引统计信息
获取有关索引的统计信息,例如每个命名空间的向量计数:
下面分别是Python、JavaScript和Curl代码
index.describe_index_stats()
const index = pinecone.Index("pinecone-index");
const indexStats = await index.describeIndexStats();
console.log(indexStats.data);
curl -i -X GET https://YOUR_INDEX-PROJECT_NAME.svc.YOUR_ENVIRONMENT.pinecone.io/describe_index_stats \
-H 'Api-Key: YOUR_API_KEY'
获取向量
Fetch
操作通过id从索引中查找和返回向量。返回的向量包括向量数据和/或元数据。典型的提取延迟在5毫秒以下。
按其ID获取项:
下面分别是Python、JavaScript和Curl代码
index.fetch(["id-1", "id-2"])
# Returns:
# {'namespace': '',
# 'vectors': {'id-1': {'id': 'id-1',
# 'values': [0.568879, 0.632687092, 0.856837332, ...]},
# 'id-2': {'id': 'id-2',
# 'values': [0.00891787093, 0.581895, 0.315718859, ...]}}}
const fetchedVectors = await index.fetch(["id-1", "id-2"]);
// Returns:
// {'namespace': '',
// 'vectors': {'id-1': {'id': 'id-1',
// 'values': [0.568879, 0.632687092, 0.856837332, ...]},
// 'id-2': {'id': 'id-2',
// 'values': [0.00891787093, 0.581895, 0.315718859, ...]}}}
curl -i -X GET "https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/fetch?ids=id-1&ids=id-2" \
-H 'Api-Key: YOUR_API_KEY'
# Output:
# {
# "vectors": {
# "id-1": {
# "id": "id-1",
# "values": [0.568879, 0.632687092, 0.856837332, ...]
# },
# "id-2": {
# "id": "id-2",
# "values": [0.00891787093, 0.581895, 0.315718859, ...]
# }
# },
# "namespace": ""
# }
更新向量
有两种方法可以更新向量和元数据,使用完整或部分更新。
完整更新
完整更新修改整个项目,即向量和元数据。按id更新项目的方式与插入数据相同。(Pinecone中的写操作是幂等的。)
Upsert
操作将向量写入索引中。
ℹ️注意
如果为现有向量标识符插入了新值,它将覆盖以前的值。
- 更新项目
("id-3",[3.3,3.3])
的值:
下面分别是Python、JavaScript和Curl代码
index.upsert([("id-3", [3.3, 3.3])])
await index.upsert({
vectors: [
{
id: "id-0",
values: [3.3, 3.3],
},
],
});
curl -i -X POST https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/upsert \
-H 'Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"vectors": [
{
"id": "id-0",
"values": [3.3, 3.3]
}
]
}'
- 再次提取项目。我们应该获得
("id-3",[3.3,3.3])
:
下面分别是Python、JavaScript和Curl代码
index.fetch(["id-3"])
const fetchedVectors = await index.fetch(["id-3"]);
curl -i -X GET https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/fetch?ids=id-3 \
-H 'Api-Key: YOUR_API_KEY'
部分更新
Update
操作执行部分更新,允许更改项目的部分内容。给定一个id,我们可以使用value
参数更新向量值,或使用set_metadata
参数更新元数据。
⚠️注意
Update
操作不验证索引中的id是否存在。如果提供了一个不存在的id,则不会进行任何更改,将返回200 OK
。
要更新项目("id-3",[3.0,3.0],{"type":"doc","genre":"drama"})
的值:
下面分别是Python、JavaScript和Curl代码
index.update(id="id-3", values=[4., 2.])
await index.update({
id: "id-3",
values: [4, 2],
});
curl -i -X POST https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/update \
-H 'Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"id": "id-3",
"values": [
3.3,
3.3
]
}'
现在更新后的项目为("id-3",[4.0,2.0],{"type":"doc","genre":"drama"})
。
当仅更新元数据时,将修改指定的字段。如果指定的字段不存在,则会添加该字段。
ℹ️注意
元数据更新仅适用于传递到
set_metadata
参数的字段。任何其他字段都将保持不变。
要更新项目("id-3",[4.0,2.0],{"type":"doc","genre":"drama"})
的元数据:
下面分别是Python、JavaScript和Curl代码
index.update(id="id-3", set_metadata={"type": "web", "new": "true"})
await index.update({
id: "id-3",
setMetadata: {
type: "web",
new: "true",
},
});
curl -i -X POST https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/update \
-H 'Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"id": "id-3",
"setMetadata": {
"type": "web",
"new": "true"
}
}'
现在更新后的项目为("id-3",[4.0,2.0],{"type":"web","genre":"drama","new":"true"})
。
可以通过包括values
和set_metadata
参数同时更新向量和元数据。要更新"id-3"
项,我们编写:
下面分别是Python、JavaScript和Curl代码
index.update(id="id-3", values=[1., 2.], set_metadata={"type": "webdoc"})
await index.update({
id: "id-3",
values: [1, 2],
setMetadata: {
type: "webdoc",
},
});
curl -i -X POST https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/update \
-H 'Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"id": "id-3",
"values": [1., 2.],
"set_metadata": {"type": "webdoc"}
}
}'
现在更新后的项目为("id-3",[1.0,2.0],{"type":"webdoc","genre":"drama","new":"true"})
。
删除向量
Delete
操作按ID从索引中删除向量。
另外,它也可以从索引或命名空间中删除所有向量。
当删除大量向量时,将删除操作的范围限制在每个操作的数百个向量范围内。
按ID删除向量
要按ID删除向量,请在delete
方法中指定一个ids
参数。ids
参数是一个字符串数组,其中包含要删除的向量ID。
示例
下面分别是Python、JavaScript和Curl代码
index.delete(ids=["id-1", "id-2"], namespace='example-namespace')
await index.delete1(["id-1", "id-2"], false, "example-namespace");
curl -i -X DELETE "https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io.pinecone.io/vectors/delete?ids=id-1&ids=id-2&namespace=example-namespace" \
-H 'Api-Key: YOUR_API_KEY'
按命名空间删除向量
要从命名空间中删除所有向量,请指定deleteAll='true'
并提供namespace
参数。
ℹ️注意事项
如果从单个命名空间中删除所有向量,则同时会删除此命名空间。
示例:
下面分别是Python、JavaScript和Curl代码
index.delete(deleteAll='true', namespace='example-namespace')
await index.delete1([], true, "example-namespace");
curl -i -X DELETE "https://YOUR_INDEX-YOUR_PROJECT.svc.YOUR_ENVIRONMENT.pinecone.io/vectors/delete?deleteAll=true&namespace=example-namespace" \
-H 'Api-Key: YOUR_API_KEY'
按元数据删除向量
要按元数据删除向量,请将元数据过滤表达式传递给删除操作。
更新于 1天前