跳到主要内容

管理数据

除了插入查询数据外,您还可以通过其他方式与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_ENVIRONMENTPinecone项目的云区域

调用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操作将向量写入索引中。

ℹ️注意

如果为现有向量标识符插入了新值,它将覆盖以前的值。

  1. 更新项目("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]
}
]
}'

  1. 再次提取项目。我们应该获得("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"})

可以通过包括valuesset_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天前