文件内容相似性检索

最近更新时间:2024-04-09 16:16:11

我的收藏

功能介绍

search() 接口用于在指定的文件内,查找与给定文本信息相似的 Top K 条文本信息。
支持指定文件名称检索最相似的文本信息。
支持文件名搭配文件元数据的标量字段的 Filter 表达式检索最相似的文本信息。
支持仅使用文件元数据的标量字段的 Filter 表达式检索最相似的文本信息。

请求示例

根据文件名搭配 Filter 检索相似数据
根据 Filter 表达式检索相似数据
如下示例,在文件腾讯云向量数据库.md中,检索与什么是向量相似的文本信息,并使用标量字段 author 与 tags 的 Filter 表达式一并过滤文件。
// link database, client 为 VectorDBClient() 创建的客户端对象
AIDatabase db = client.aiDatabase("db-test-ai");
// link collectionView
CollectionView collection = db.describeCollectionView("coll-ai-files");
// 设置查询参数
// Content 配置需检索的文本信息
// SearchContentOption,设置检索结果的输出要求,ChunkExpand 指定输出内容向前和向后扩展的段落
// Filter 设置 author 与 tags 字段的 Filter 表达式,过滤文件
// DocumentSetNames 指定需要查找的文件名,可批量设置
SearchByContentsParam searchByContentsParam = SearchByContentsParam.newBuilder()
.withContent("什么是向量")
.withSearchContentOption(SearchOption.newBuilder().withChunkExpand(Arrays.asList(1,1)))
.withFilter(new Filter(Filter.in("author", Arrays.asList("Tencent","tencent"))).and(Filter.include("tags", Arrays.asList("AI","Embedding"))))
.withDocumentSetNames(Arrays.asList("腾讯云向量数据库.md"))
.build();
// 根据配置的查询条件进行内容检索
List<Document> searchRes = collection.search(searchByContentsParam);
// 输出检索结果
int i = 0;
for (Document doc : searchRes) {
System.out.println("\\tres" +(i++)+": "+ doc.toString());
}
如下示例,通过文件 meta 信息的标量字段 author 的 Filter 表达式,检索与什么是向量数据库相似的文本信息。
// link database, client 为 VectorDBClient() 创建的客户端对象
AIDatabase db = client.aiDatabase("db-test-ai");
// link collectionView
CollectionView collection = db.describeCollectionView("coll-ai-files");
// 设置查询参数
SearchByContentsParam searchByContentsParam = SearchByContentsParam.newBuilder()
.withContent("什么是向量")
.withSearchContentOption(SearchOption.newBuilder().withChunkExpand(Arrays.asList(1,1)))
.withFilter(new Filter(Filter.in("author", Arrays.asList("Tencent","tencent"))).and(Filter.include("tags", Arrays.asList("AI","Embedding"))))
.build();
// 根据配置的查询条件进行内容检索
List<Document> searchRes = collection.search(searchByContentsParam);
// 输出检索结果
int i = 0;
for (Document doc : searchRes) {
System.out.println("\\tres" +(i++)+": "+ doc.toString());
}


请求参数

参数名称
是否必选
参数含义及配置方法
Content
以 String 类型输入检索的文本信息。
ChunkExpand
以数组形式配置检索的目标信息所需向前扩展的段落数量以及向后扩展的段落数。例如,输入[2,3],指所检索到的 Chunk 返回时,同时返回其之前的 2个段落与之后的3个段落。
段落指文件在上传存储时,自动向量化拆分的段落。
默认值:[1,1]。
DocumentSetNames
表示要查询的文档的名称,支持批量查询,数组元素范围[1,20]。
Filter
使用创建 CollectionView 指定的 Filter 索引的字段设置查询过滤表达式。Filter 表达式格式为 <field_name><operator><value>,多个表达式之间支持 and(与)、or(或)、not(非)关系。具体信息,请参见 混合检索。其中:
<field_name>:表示要过滤的字段名。
<operator>:表示要使用的运算符。
string :匹配单个字符串值(=)、排除单个字符串值(!=)、匹配任意一个字符串值(in)、排除所有字符串值(not in)。其对应的 Value 必须使用英文双引号括起来。
uint64:大于(>)、大于等于(>=)、等于(=)、小于(<)、小于等于(<=)。例如:expired_time > 1623388524。
array:数组类型,包含数组元素之一(include)、排除数组元素之一(exclude)、全包含数组元素(include all)。例如,name include (\\"Bob\\", \\"Jack\\")。
<value>:表示要匹配的值。
示例:Filter('author="jerry"').And('page>20')
Limit
指定返回最相似的 Top K 的 K 的值。

返回参数

如下为检索到的相似数据,返回最相似的 Top 3 条数据。
res0: {
"score": 0.8938464522361755,
"data": {
"text": "### 什么是向量?\\n向量是指在数学和物理中用来表示大小和方向的量。它由一组有序的数值组成,这些数值代表了向量在每个坐标轴上的分量。\\n",
"endPos": 508,
"startPos": 441,
"next": [
"### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n"
],
"pre": [
"## 关键概念\\n如果您不熟悉向量数据库和相似性搜索领域,请优先阅读以下基本概念,便于您对向量数据库有一个初步的了解。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}res1: {
"score": 0.8378515839576721,
"data": {
"text": "### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n",
"endPos": 784,
"startPos": 585,
"next": [
"### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n"
],
"pre": [
"### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}res2: {
"score": 0.8152828216552734,
"data": {
"text": "### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n",
"endPos": 876,
"startPos": 784,
"next": [
"## 为什么是腾讯云向量数据库?\\n腾讯云向量数据库作为一种专门存储和检索向量数据的服务提供给用户, 在高性能、高可用、大规模、低成本、简单易用、稳定可靠、智能运维等方面体现出显著优势。 \\n"
],
"pre": [
"### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}
参数名
子参数
参数含义
score
-
表示查询向量与检索结果向量之间的相似性计算分数。
说明:
检索结果会按照与查询向量的相似程度进行排列,相似度最高的结果会排在最前面,相似度最低的结果则排在最后面。相似程度则通过 L2(欧几里得距离)、IP(内积)或 COSINE(余弦相似度)计算得出的分数来衡量,输出参数 score 表示相似性计算分数。其中,L2和 IP 计算所得的分数越小,表示与搜索值越相似;而 COSINE 计算所得的分数越大,表示与搜索值越相似。
data
text
检索的结果。
endPos
检索结果在文件中偏移的结束位置。
startPos
检索结果在文件中偏移的起始位置。
next
根据检索时,设置的参数 expand_chunk,返回检索结果向后扩展的段落。
pre
根据检索时,设置的参数 expand_chunk,返回检索结果向前扩展的段落。
documentSet
documentSetId
文件 ID。
documentSetName
文件名。
docFields
自定义的文件 Metadata 信息的标量字段。例如:author、tags等。
说明:
显示创建 CollectionView 时设置为 Filter 索引的字段,同时显示上传文件时或使用 update 新增的字段,但新增的字段不会构建索引。
name:字段名。
value:字段值。
fieldType:字段类型,支持string、unit64、array。