query - 向量查询
query() 用于执行向量相似性搜索,以找到与查询向量最相似的 documents。
信息
仅支持在使用 Client 连接时,才能使用该接口。关于 Client 的详细介绍,参见 Client。
前提条件
-
您已经安装了 pyseekdb,有关安装 pyseekdb 的详细信息,参见 快速开始。
-
您已经连接到数据库。有关连接的详细操作参见 Client。
-
您已经创建了 collection,并插入相应的数据。有关创建 collection 和插入数据的详细操作参见 create_collection - 创建 Collection 和 add - 插入数据。
请求参数
query()
| 参数 | 取值类型 | 是否必选 | 描述 | 取值示例 |
|---|---|---|---|---|
query_embeddings | List[float] or List[List[float]] | 必选 | 用于批量查询的单个向量或向量列表;如果提供,则直接使用(忽略embedding_function);如果没有提供,则必须提供 query_text,collection 必须具有 embedding_function | [1.0, 2.0, 3.0] |
query_texts | str or List[str] | 可选 | 单个 vectors 或 vectors 列表;如果提供,则直接使用(忽略 embedding_function);如果没有提供,则必须提供 documents,同时 collection 必须具有 embedding_function。 | ["my query text"] |
n_results | int | 必须 | 返回相似的结果数,默认值为 10 | 3 |
where | dict | 可选 | Metadata 筛选条件。 | {"category": {"$eq": "AI"}} |
where_document | dict | 可选 | Document 筛选条件。 | {"$contains": "machine"} |
include | List[str] | 可选 | 要包含的字段列表:["documents", "metadatas", "embeddings"]。 | ["documents", "metadatas", "embeddings"] |
信息
使用的 embedding_function 是与 collection 相关联的(在 create_collection() 或 get_collection() 期间设置)。您不能每次操作都覆盖它。
请求示例
import pyseekdb
# Create a client
client = pyseekdb.Client()
collection = client.get_collection("my_collection")
collection1 = client.get_collection("my_collection1")
# Basic vector similarity query (embedding_function not used)
results = collection.query(
query_embeddings=[1.0, 2.0, 3.0],
n_results=3
)
# Iterate over results
for i in range(len(results["ids"][0])):
print(f"ID: {results['ids'][0][i]}, Distance: {results['distances'][0][i]}")
if results.get("documents"):
print(f"Document: {results['documents'][0][i]}")
if results.get("metadatas"):
print(f"Metadata: {results['metadatas'][0][i]}")
# Query by texts - vectors auto-generated by embedding_function
# Requires: collection must have embedding_function set
results = collection1.query(
query_texts=["my query text"],
n_results=10
)
# The collection's embedding_function will automatically convert query_texts to query_embeddings
# Query by multiple texts (batch query)
results = collection1.query(
query_texts=["query text 1", "query text 2"],
n_results=5
)
# Returns dict with lists of lists, one list per query text
for i in range(len(results["ids"])):
print(f"Query {i}: {len(results['ids'][i])} results")
# Query with metadata filter (using query_texts)
results = collection1.query(
query_texts=["AI research"],
where={"category": {"$eq": "AI"}},
n_results=5
)
# Query with comparison operator (using query_texts)
results = collection1.query(
query_texts=["machine learning"],
where={"score": {"$gte": 90}},
n_results=5
)
# Query with document filter (using query_texts)
results = collection1.query(
query_texts=["neural networks"],
where_document={"$contains": "machine learning"},
n_results=5
)
# Query with combined filters (using query_texts)
results = collection1.query(
query_texts=["AI research"],
where={"category": {"$eq": "AI"}, "score": {"$gte": 90}},
where_document={"$contains": "machine"},
n_results=5
)
# Query with multiple vectors (batch query)
results = collection.query(
query_embeddings=[[1.0, 2.0, 3.0], [2.0, 3.0, 4.0]],
n_results=2
)
# Returns dict with lists of lists, one list per query vector
for i in range(len(results["ids"])):
print(f"Query {i}: {len(results['ids'][i])} results")
# Query with specific fields
results = collection.query(
query_embeddings=[1.0, 2.0, 3.0],
include=["documents", "metadatas", "embeddings"],
n_results=3
)
返回参数
| 参数 | 取值类型 | 是否必选 | 描述 | 取值示例 |
|---|---|---|---|---|
ids | List[List[str]] | 必选 | 需要新增或者修改的 ID。可以是单个,也可以是数组。 | item1 |
embeddings | [List[List[List[float]]]] | 可选 | vectors;如果提供,直接使用(忽略 embedding_function),如果不提供,可以提供 documents 来自动生成 vectors。 | [0.1, 0.2, 0.3] |
documents | [List[List[Dict]]] | 可选 | documents。如果没有提供 vectors,documents 将使用 collection 的 embedding_function 转换为 vectors。 | "Document text" |
metadatas | [List[List[Dict]]] | 可选 | metadata。 | {"category": "AI"} |
distances | [List[List[Dict]]] | 可选 | {"category": "AI"} |
返回示例
ID: vec1, Distance: 0.0
Document: None
Metadata: {}
ID: vec2, Distance: 0.025368153802923787
Document: None
Metadata: {}
Query 0: 4 results
Query 1: 4 results
Query 0: 2 results
Query 1: 2 results