hybridSearch - 混合搜索
hybridSearch() 用于将全文搜索和向量相似度搜索与排名相结合。
仅支持在使用 SeekdbClient 连接时,才能使用该接口。关于 SeekdbClient 的详细介绍,参见 SeekdbClient。
前提条件
-
您已经安装了 seekdb-js,有关安装 seekdb-js 的详细信息,参见 快速开始。
-
您已经安装了 seekdb 服务器模式,有关安装 seekdb 服务器模式的详细信息,参见 通过 yum install 部署 seekdb。
-
您已经连接到数据库。有关连接的详细操作参见 SeekdbClient。
-
您已经创建了 collection,并插入相应的数据。有关创建 collection 和插入数据的详细操作参见 createCollection - 创建 Collection 和 add - 插入数据。
请求参数
hybrid_search(
query={
"whereDocument": ,
"where": ,
"nResults":
},
knn={
queryEmbeddings
"queryTexts":
"where":
"nResults":
},
rank=,
nResults=,
include=
)
-
query:全文搜索配置,包括以下几个参数:
参数 取值类型 是否必选 描述 取值示例 whereWhere 可选 Metadata 筛选条件。 {"category": {"$eq": "AI"}}whereDocumentWhereDocument 可选 文档内容过滤条件(全文搜索)。 {"$contains": "machine"}nResultsnumber 可选 全文搜索的结果数 -
knn:Vector 搜索配置,包括以下几个参数:
参数 取值类型 是否必选 描述 取值示例 queryEmbeddingsnumber[] | number[][] 可选 用于批量查询的单个向量或向量列表;如果提供,则直接使用(忽略embeddingFunction);如果没有提供,则必须提供 query_text,collection必须具有embeddingFunction[1.0, 2.0, 3.0] queryTextsstring | string[] 可选 单个向量或向量列表;如果提供,则直接使用(忽略 embeddingFunction);如果没有提供,则必须提供documents,同时collection必须具有embeddingFunction。["my query text"] whereWhere 可选 Metadata 筛选条件。 {"category": {"$eq": "AI"}}nResultsnumber 可选 向量搜索返回结果数量 -
其他参数如下:
|参数|取值类型|是否必选|描述|取值示例| |
rank|HybridSearchRank |可选|排名配置,例如:{"rrf": {"rank_window_size": 60, "rank_constant": 60}}|{"category": {"$eq": "AI"}}| |nResults|number|必须|返回相似的结果数,默认值为 10|3| |include|readonly ("documents" | "metadatas" | "embeddings" | "distances")[]|可选|要包含的字段列表:["documents", "metadatas", "embeddings"]。|["documents", "metadatas", "embeddings"]|
- 使用的
embeddingFunction是与 collection 相关联的(在createCollection()或getCollection()期间设置)。您不能每次操作都覆盖它。 - 至少提供 query 或 knn 中的一个
- knn:
queryEmbeddings存在时将根据collection.dimension验证维度是否一致。queryTexts: string 或 string[]; 使用集合的embeddingFunction自动嵌入 (缺少函数会抛出 ValueError)。
- 如果提供
knn.queryTexts,需要配置embeddingFunction。
请求示例
import { SeekdbClient } from "seekdb";
const client = new SeekdbClient({
host: "127.0.0.1",
port: 2881,
user: "root",
password: "",
database: "test",
});
const collection = await client.getCollection({name: 'my_collection'});
const results = await collection.hybridSearch({
query: {
whereDocument: {$contains: "machine learning"},
nResults: 10
},
knn: {
queryTexts: 'documents',
nResults: 10
},
rank: {rrf: {}},
nResults: 10
});