元数据字段与过滤
知识检索 的 metadataFilter 支持标准字段与当前租户已启用的自定义字段。自定义字段应先发现稳定的 fieldKey,再构造过滤条件。
发现自定义字段
GET /openapi/paas/v1/knowledge/metadata/fields
使用 Authorization: Bearer tk-...,平台密钥要求 knowledge_search=READ。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | 按字段展示名称精确匹配 |
fieldKey | string | 否 | 按稳定字段标识精确匹配 |
不传条件时列出当前租户启用的自定义字段,同时传入时两项都需匹配。不会列出停用字段。
curl --get "${BASE_URL}/openapi/paas/v1/knowledge/metadata/fields" \
--header "Authorization: Bearer ${AIS_API_KEY}" \
--data-urlencode "name=业务地区"
{
"code": 8200,
"message": "SUCCESS",
"data": [
{
"fieldKey": "business_region",
"name": "业务地区",
"inputMode": "ENUM",
"valueType": "STRING",
"businessScopes": [],
"options": [
{"name": "华东", "optionValue": "east"}
]
}
]
}
响应字段
| 字段 | JSON 类型 | 说明 |
|---|---|---|
data | array[object] | 当前租户启用字段;无匹配时为空数组 |
data[].fieldKey | string | 稳定字段标识,用于构造 custom.fieldKey |
data[].name | string | 展示名称,不应用作存储键 |
data[].inputMode | string | INPUT 自由输入,ENUM 枚举选项 |
data[].valueType | string | STRING、INTEGER、DATE,决定比较值格式及操作符 |
data[].businessScopes | array[string] | 适用业务范围;空数组为全局,不代表停用 |
data[].options | array[object] | 启用的枚举项;非枚举字段可为空 |
data[].options[].name | string | 选项展示名称 |
data[].options[].optionValue | string | 检索时提交的稳定枚举值 |
inputMode 为 INPUT 或 ENUM;valueType 为 STRING、INTEGER 或 DATE。businessScopes 表示绑定的业务范围,空数组表示全局可用。options 列出启用的枚举选项,过滤时使用 optionValue,不是显示名称。
条件组结构
{
"logicalOperator": "AND",
"conditions": [
{"field": "suffix", "operator": "EQ", "value": "pdf"},
{"field": "custom.business_region", "operator": "IN", "values": ["east"]}
],
"groups": [
{
"logicalOperator": "OR",
"conditions": [
{"field": "author", "operator": "EQ", "value": "示例作者"},
{"field": "title", "operator": "CONTAINS", "value": "产品"}
]
}
]
}
将此对象放进检索请求的 metadataFilter。示例自定义字段需要在当前租户实际存在且启用,不能直接套用不存在的 fieldKey。
| 规则 | 限制 |
|---|---|
logicalOperator | AND、OR,省略时默认 AND |
| 嵌套深度 | 最多 3 层,根组计为第 1 层 |
| 总条件数 | 全部层级合计最多 20 条 |
| 单组集合 | conditions、groups 各最多 20 项;至少一项非空 |
IN、NOT_IN | 使用 values 数组,1~20 个值 |
| 其他比较 | 使用字符串 value |
EXISTS、NOT_EXISTS | 无需 value 或 values |
标准字段比较值须非空,最长 256 字符;数值用整数字符串,标准时间戳用毫秒数字字符串。
过滤对象字段明细
| 字段 | JSON 类型 | 何时填写 | 说明 |
|---|---|---|---|
logicalOperator | string | 可省略 | 当前组的 AND/OR 关系,默认 AND |
conditions | array[object] | 与 groups 至少一个非空 | 当前层直接条件 |
conditions[].field | string | 每个条件必填 | 标准字段或 custom.fieldKey |
conditions[].operator | string | 每个条件必填 | 按字段类型选择下表操作符 |
conditions[].value | string | 单值比较 | 不传数值 JSON;数值也使用字符串 |
conditions[].values | array[string] | IN / NOT_IN | 集合比较值 |
groups | array[object] | 可选 | 子条件组,递归复用本对象 |
过滤对象不是独立接口响应。它作为知识检索请求的一部分,成功返回检索响应;校验失败返回普通错误结构。
常用标准字段
| 字段类别 | 字段 | 支持操作符 |
|---|---|---|
| 字符串及数组 | tag、title、author、suffix、pathTitle、keywords | EQ、NE、IN、NOT_IN、CONTAINS、NOT_CONTAINS、STARTS_WITH、ENDS_WITH、EXISTS、NOT_EXISTS |
| 全文文本 | summary | CONTAINS、NOT_CONTAINS、EXISTS、NOT_EXISTS |
| 整数 | fileSize(字节) | EQ、NE、IN、NOT_IN、GT、GTE、LT、LTE、EXISTS、NOT_EXISTS |
| 毫秒时间戳 | created、modified | 同整数 |
| 时间语义数组 | temporalTokens、temporalTitleTokens、temporalPathTokens、temporalContentTokens、temporalSummaryTokens | 同字符串;值由服务端进行时间语义归一化 |
以上列出常用公开字段。不要使用租户隔离、内部权限或数据库字段名自行构造过滤条件。
自定义字段
字段格式是 custom.{fieldKey},例如 custom.business_region。fieldKey 以小写字母开头,只含小写字母、数字和下划线,最长 64;使用发现接口返回值。
| 自定义类型 | 值格式 | 操作符 |
|---|---|---|
STRING | 字符串;枚举传 optionValue | EQ、NE、IN、NOT_IN、EXISTS、NOT_EXISTS |
INTEGER | 可解析的整数字符串 | 上述操作符及 GT、GTE、LT、LTE |
DATE | yyyy-MM-dd | 同 INTEGER |
自定义字符串暂不支持 CONTAINS、前缀或后缀匹配。自定义 DATE 使用日期字符串,和标准 created、modified 的毫秒时间戳不同。
{
"logicalOperator": "AND",
"conditions": [
{"field": "custom.effective_date", "operator": "GTE", "value": "2026-09-01"},
{"field": "created", "operator": "GTE", "value": "1788220800000"}
]
}
字段不存在、停用、比较值类型错误或操作符不支持时会失败。发现字段只代表定义可用;检索结果还取决于文档是否已标注对应元数据并完成索引更新。