知识库SearchFilters

更新时间:2025-05-12 08:03:49

如果您在请求 Retrieve 接口时返回的结果包含较多干扰信息,可以参考本文示例,在请求时传入SearchFilters设置个性化的检索条件,对语义检索结果进行过滤,以排除与查询Query无关的信息(该方法尤其适合结构化数据)。

指知识库的Retrieve接口。

效果对比

请求Retrieve接口时未传入SearchFilters

请求Retrieve接口时传入SearchFilters

请求Retrieve接口时未传入SearchFilters

请求Retrieve接口时传入SearchFilters

Retrieve请求体:

{
  "indexId": "o73yjlxxxx",
  "query": "公司中姓名为张三的员工"
}





Retrieve请求体:

{
  "indexId": "o73yjlxxxx",
  "query": "公司中姓名为张三的员工",
  "searchFilters": [
    {
      "姓名": "张三"
    }
  ]
}

Retrieve请求返回:

传统语义检索返回了一些与查询Query(张三)不太相关的文本切片。

image

Retrieve接口返回:

通过设置检索条件(SearchFilters),过滤语义检索结果中与查询Query(张三)无关的文本切片。

image

语法说明

SearchFilters可以包含一个或多个子分组(例如下方示例包含了两个子分组)。每个子分组由一组或多组Key-Value键值对(检索字段:字段值)组成,对通过用户提示词找到的文本切片进行进一步过滤。子分组之间默认采用 AND 语义,且不可更改。关于如何使用子分组,请参见子分组查询示例

{
  "searchFilters": [
    {
      "姓名": "张三",
      "性别": "男"
    },
    {
      "岗位": "技术员"
    }
  ]
}

子分组内的检索字段支持单值查询多值查询范围查询模糊查询标签(Tag)查询

  • 单值查询:字段类型只支持数值(longdouble)、字符串(string)。关于如何使用单值查询,请参见单值查询示例

  • 多值查询:只支持由纯数值(longdouble)或纯字符串(string)组成的数组。关于如何使用多值查询,请参见多值查询示例

  • 范围查询:支持等值查询区间查询。关于如何使用范围查询,请参见范围查询示例

    • 等值查询:支持 eq(等于)、neq(不等于) 属性,字段类型支持数值(longdouble)和字符串(string)。一个字段不可配置多个值(不区分大小写)。

    • 区间查询:支持 gt(大于)、gte(大于等于)、lt(小于)、lte(小于等于) 属性,字段类型只支持数值(long, double)。

  • 模糊查询:字段类型只支持字符串(string)。支持like 属性。关于如何使用模糊查询,请参见模糊查询示例

  • 标签(Tag)查询:只支持非结构化知识库。关于如何使用标签查询,请参见标签(Tag)查询示例

前提条件

在您开始使用 SearchFilters 之前,请确保:

  • 子账号(主账号不需要)需获取AliyunBailianDataFullAccess策略,并加入一个业务空间,然后才能使用阿里云API操作知识库。

    子账号只能操作自己已加入的业务空间中的知识库;主账号可操作所有业务空间下的知识库。
  • 获取业务空间ID

  • 安装了阿里云百炼SDK并配置好了环境。

  • 获取并配置AccessKeyAccessKey Secret到环境变量

  • 准备好了包含员工信息的文档员工信息表.xlsx(包含三条记录),用于创建一个包含员工信息的知识库(下文示例中会用到)。有关创建新知识库的说明,请参见知识库。该知识库使用以下设置:

    • 在导入数据时,请选择结构化数据(数据表)。

    • 数据表包含四个字段:姓名性别岗位(均为string类型)和年龄double类型)。

    • 在创建知识库时,数据类型请选择结构化数据,数据来源请选择数据管理(手动导入的数据表)。所有字段均参与检索模型回复

    image

完整代码示例

您可以展开下方折叠面板查看本文的PythonJava完整示例代码(其他语言需要您参照示例代码自行编写)。

调用示例代码前您需要获取并配置AccessKeyAccessKey Secret到环境变量
Python
Java

SearchFiltersFullExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class SearchFiltersFullExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def sub_group_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中叫张三的员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 分组1查询属性为姓名,值为张三。分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
            retrieve_request.search_filters = [
                {"姓名": "张三"},
                {"性别": "女"}
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)

    @staticmethod
    def single_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中叫张三的员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            retrieve_request.search_filters = [
                {"姓名": "张三"}
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)

    @staticmethod
    def multi_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中所有员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 创建一个列表,用于存放多值。
            names = ["张三", "李四"]
            # 多值查询属性为姓名,对应上方names列表。值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
            retrieve_request.search_filters = [{"姓名": json.dumps(names)}]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)

    @staticmethod
    def range_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中所有员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
            age_range = SearchFiltersFullExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"岗位": "技术员"},  # 分组1: 岗位筛选条件
                {"年龄": json.dumps(age_range.to_dict())}  # 分组2: 年龄范围筛选条件
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)

    @staticmethod
    def wildcard_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中的男性员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 模糊查询属性为岗位,值为技 % 员,此处 % 代表匹配任意字符(包括零个字符)。您可以替换为实际值。
            position = SearchFiltersFullExample.QueryObject('技%员')
            retrieve_request.search_filters = [
                {"姓名": "张三"},  # 姓名筛选条件。您可以替换为实际要查询的属性和值。
                {"岗位": json.dumps(position.to_dict())}  # 岗位(模糊查询)筛选条件。您可以替换为实际要查询的属性和值。
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
    
    @staticmethod
    def tag_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '请提供一些候选人'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 创建一个列表,用于存放标签。多个标签之间是或(OR)的关系,不是与(AND)的关系。
            tags = ["A大学", "学生会主席"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tags)}
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            
        @staticmethod
    def tag_query2() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '请提供一些候选人'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 创建两个列表,用于存放标签。
            tag1 = ["A大学"]
            tag2 = ["体育特长生"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tag1)},
                {"tags": json.dumps(tag2)}
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)

    @staticmethod
    def main(args: List[str]) -> None:
        SearchFiltersFullExample.sub_group_query()
        SearchFiltersFullExample.single_query()
        SearchFiltersFullExample.multi_query()
        SearchFiltersFullExample.range_query()
        SearchFiltersFullExample.wildcard_query()
        SearchFiltersFullExample.tag_query()
        SearchFiltersFullExample.tag_query2()


if __name__ == '__main__':
    SearchFiltersFullExample.main(sys.argv[1:])

SearchFiltersFullExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SearchFiltersFullExample {    
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void subgroupQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中叫张三的员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map1 = new HashMap<>();
            // 分组1查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            map1.put("姓名", "张三");
            Map<String, String> map2 = new HashMap<>();
            // 分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
            map2.put("性别", "女");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }

    public static void singleQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中叫张三的员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map = new HashMap<>();
            // 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            map.put("姓名", "张三");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }

    public static void multiQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中所有员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放多值
            JsonArray array = new JsonArray();
            array.add("张三");
            array.add("李四");
            Map<String, String> map = new HashMap<>();
            // 多值查询属性为姓名,值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
            map.put("姓名", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
    
    public static void rangeQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中所有员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map1 = new HashMap<>();
            // 分组1查询属性为性别,值为男。您可以替换为实际需要查询的属性和值。
            map1.put("性别", "男");
            // 分组2查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
            Map<String, String> map2 = new HashMap<>();
            Range range = new Range(20, 27);
            map2.put("年龄", new Gson().toJson(range));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }

    public static void wildcardQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中的男性员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 分组1查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            Map<String, String> map1 = new HashMap<>();
            map1.put("姓名", "张三");
            // 分组2查询属性为岗位,值为技%员,此处%代表匹配任意字符(包括零个字符)。您可以替换为实际需要查询的属性和值。
            Map<String, String> map2 = new HashMap<>();
            QueryObject queryObject = new QueryObject("技%员");
            map2.put("岗位", new Gson().toJson(queryObject));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
    
    public static void tagQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("请提供一些候选人");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放标签。多个标签之间是或(OR)的关系,不是与(AND)的关系。
            JsonArray array = new JsonArray();
            array.add("A大学");
            array.add("学生会主席");
            Map<String, String> map = new HashMap<>();
            map.put("tags", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
    
    public static void tagQuery2() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("请提供一些候选人");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放标签。
            JsonArray tag1 = new JsonArray();
            tag1.add("A大学");
            JsonArray tag2 = new JsonArray();
            tag2.add("体育特长生");
            Map<String, String> map1 = new HashMap<>();
            map1.put("tags", tag1.toString());
            Map<String, String> map2 = new HashMap<>();
            map2.put("tags", tag2.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        subgroupQuery();
        singleQuery();
        multiQuery();
        rangeQuery();
        wildcardQuery();
        tagQuery();
        tagQuery2();
    }
    
    static class Range {
        double gte;
        double lte;

        public Range(double gte, double lte) {
            this.gte = gte;
            this.lte = lte;
        }
    }

    static class QueryObject {
        String like;

        public QueryObject(String prefix) {
            this.like = prefix;
        }

        public String getLike() {
            return like;
        }

        public void setLike(String like) {
            this.like = like;
        }
    }
}

快速开始

以下部分将为您介绍如何使用SearchFilters进行查询。

子分组查询示例

子分组用于过滤知识库的召回结果,仅返回满足特定条件的文本切片。您可以将多个子分组(条件)添加到SearchFilters中。子分组之间默认采用 AND 语义,且不可更改。

例如检索员工信息知识库,并筛选出姓名张三性别的记录(知识库中不存在这样的记录)。

{
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "性别": "女"
    }
  ]
}
您可以展开下方折叠面板,查看子分组的PythonJava示例代码。
Python
Java

SubGroupQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class SubGroupQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = SubGroupQueryExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中叫张三的员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 分组1查询属性为姓名,值为张三。分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
            retrieve_request.search_filters = [
                {"姓名": "张三"},
                {"性别": "女"}
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    SubGroupQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "bmy6e6xxxx",
  "query": "公司中叫张三的员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "性别": "女"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": []
  },
  "message": "success",
  "requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
  "status": "200",
  "success": true
}

SubGroupQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SubGroupQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中叫张三的员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map1 = new HashMap<>();
            // 分组1查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            map1.put("姓名","张三");
            Map<String, String> map2 = new HashMap<>();
            // 分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
            map2.put("性别","女");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
}

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "bmy6e6xxxx",
  "query": "公司中叫张三的员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "性别": "女"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": []
  },
  "message": "success",
  "requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
  "status": "200",
  "success": true
}

单值查询示例

在单值查询时,需要为检索字段传入唯一的值。例如检索员工信息知识库,并筛选出姓名张三的记录:

{
  "searchFilters": [
    {
      "姓名": "张三"
    }
  ]
}
您可以展开下方折叠面板,查看单值查询的PythonJava示例代码。
Python
Java

SingleQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class SingleQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = SingleQueryExample.create_client()
        # 创建retrieve_request对象。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必填,您可以传入用户实际输入的提示词。
        retrieve_request.query = '公司中叫张三的员工'
        # 必填,请传入实际的知识库ID。
        retrieve_request.index_id = '请传入实际的知识库ID'
        # 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
        retrieve_request.search_filters = [
            {"姓名": "张三"}
        ]
        try:
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    SingleQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "bmy6e6xxxx",
  "query": "公司中叫张三的员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.32581159472465515,
          "_q_score": 1,
          "source": "0",
          "_score": 0.4556944966316223,
          "doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_bmy6e65niw_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
          "年龄": "25",
          "岗位": "技术员"
        },
        "score": 0.4556944966316223,
        "text": "姓名:张三 年龄:25 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
  "status": "200",
  "success": true
}

SingleQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SingleQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中叫张三的员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map = new HashMap<>();
            // 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            map.put("姓名","张三");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
}

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "bmy6e6xxxx",
  "query": "公司中叫张三的员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.32581159472465515,
          "_q_score": 1,
          "source": "0",
          "_score": 0.4556944966316223,
          "doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_bmy6e65niw_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
          "年龄": "25",
          "岗位": "技术员"
        },
        "score": 0.4556944966316223,
        "text": "姓名:张三 年龄:25 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
  "status": "200",
  "success": true
}

多值查询示例

多值查询允许您为检索字段传入多个值,效果类似于SQL中的IN操作符。例如检索员工信息知识库,并筛选出姓名张三李四的记录:

{
  "searchFilters": [
    {
      "姓名": "["张三","李四"]"
    }
  ]
}
您可以展开下方折叠面板,查看多值查询的PythonJava示例代码。
Python
Java

MultiQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class MultiQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = MultiQueryExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中所有员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 创建一个列表,用于存放多值。
            names = ["张三", "李四"]
            # 多值查询属性为姓名,对应上方names列表。值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
            retrieve_request.search_filters = [{"姓名": json.dumps(names)}]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    MultiQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中所有员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "[\"张三\",\"李四\"]"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.3322954773902893,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      },
      {
        "metadata": {
          "_rc_v_score": 0.2531493306159973,
          "_q_score": 0.8392540654998252,
          "source": "0",
          "_score": 0.25632044672966003,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "性别": "女",
          "_rc_score": 0,
          "姓名": "李四",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_2",
          "年龄": "31.0",
          "岗位": "销售"
        },
        "score": 0.25632044672966003,
        "text": "姓名:李四 年龄:31.0 岗位:销售 性别:女"
      }
    ]
  },
  "message": "success",
  "requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
  "status": "200",
  "success": true
}

MultiQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中所有员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放多值
            JsonArray array = new JsonArray();
            array.add("张三");
            array.add("李四");
            Map<String, String> map = new HashMap<>();
            // 多值查询属性为姓名,值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
            map.put("姓名", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
}

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中所有员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "[\"张三\",\"李四\"]"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.3322954773902893,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      },
      {
        "metadata": {
          "_rc_v_score": 0.2531493306159973,
          "_q_score": 0.8392540654998252,
          "source": "0",
          "_score": 0.25632044672966003,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "性别": "女",
          "_rc_score": 0,
          "姓名": "李四",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_2",
          "年龄": "31.0",
          "岗位": "销售"
        },
        "score": 0.25632044672966003,
        "text": "姓名:李四 年龄:31.0 岗位:销售 性别:女"
      }
    ]
  },
  "message": "success",
  "requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
  "status": "200",
  "success": true
}

范围查询示例

通过范围查询,您可以找出检索字段(例如年龄)值在指定范围内满足条件的所有记录。

例如检索员工信息知识库,并筛选出岗位技术员(单值查询),且年龄2025岁之间(范围查询)的记录:

{
  "searchFilters": [
    {
      "岗位": "技术员"
    },
    {
      "年龄": {
        "gte": 20,
        "lte": 25
      }
    }
  ]
}
您可以展开下方折叠面板,查看范围查询的PythonJava示例代码。
Python
Java

RangeQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class RangeQueryExample:
    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = RangeQueryExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中所有员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
            age_range = RangeQueryExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"岗位": "技术员"},  # 分组1: 岗位筛选条件
                {"年龄": json.dumps(age_range.to_dict())}  # 分组2: 年龄范围筛选条件
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    RangeQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中所有员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "性别": "男"
    },
    {
      "年龄": "{\"gte\":20.0,\"lte\":27.0}"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.3322954773902893,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

RangeQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RangeQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中所有员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            Map<String, String> map1 = new HashMap<>();
            // 分组1查询属性为性别,值为男。您可以替换为实际需要查询的属性和值。
            map1.put("性别", "男");
            // 分组2查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
            Map<String, String> map2 = new HashMap<>();
            Range range = new Range(20, 27);
            map2.put("年龄", new Gson().toJson(range));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
    
    static class Range {
        double gte;
        double lte;

        public Range(double gte, double lte) {
            this.gte = gte;
            this.lte = lte;
        }
    }
}

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中所有员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "性别": "男"
    },
    {
      "年龄": "{\"gte\":20.0,\"lte\":27.0}"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.3322954773902893,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

模糊查询示例

模糊查询允许您使用指定通配符查找包含特定字符序列的记录,效果类似于SQL中的LIKE操作符。

SearchFilters模糊查询支持以下通配符(和SQL语法一致):

通配符

描述

通配符

描述

%

替代 0 个或多个字符。

_

替代一个字符。

例如检索员工信息知识库,并筛选出姓名张三岗位包含两个字(可能是技术员,也可能是技术人员等)的记录:

{
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "岗位": {
        "like": "技%员"
      }
    }
  ]
}
您可以展开下方折叠面板,查看模糊查询的PythonJava示例代码。
Python
Java

WildcardQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class WildcardQueryExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = WildcardQueryExample.create_client()
            # 创建retrieve_request对象。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必填,您可以传入用户实际输入的提示词。
            retrieve_request.query = '公司中的男性员工'
            # 必填,请传入实际的知识库ID。
            retrieve_request.index_id = '请传入实际的知识库ID'
            # 模糊查询属性为岗位,值为技 % 员,此处 % 代表匹配任意字符(包括零个字符)。您可以替换为实际值。
            position = WildcardQueryExample.QueryObject('技%员')
            retrieve_request.search_filters = [
                {"姓名": "张三"},  # 姓名筛选条件。您可以替换为实际要查询的属性和值。
                {"岗位": json.dumps(position.to_dict())}  # 岗位(模糊查询)筛选条件。您可以替换为实际要查询的属性和值。
            ]
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    WildcardQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中的男性员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "岗位": "{\"like\":\"技%员\"}"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.41137335930387275,
          "_q_score": 1,
          "source": "0",
          "_score": 0.46098726987838745,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.46098726987838745,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
  "status": "200",
  "success": true
}

WildcardQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class WildcardQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args_) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("公司中的男性员工");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 分组1查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
            Map<String, String> map1 = new HashMap<>();
            map1.put("姓名", "张三");
            // 分组2查询属性为岗位,值为技%员,此处%代表匹配任意字符(包括零个字符)。您可以替换为实际需要查询的属性和值。
            Map<String, String> map2 = new HashMap<>();
            QueryObject queryObject = new QueryObject("技%员");
            map2.put("岗位", new Gson().toJson(queryObject));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }

    static class QueryObject {
        String like;

        public QueryObject(String prefix) {
            this.like = prefix;
        }

        public String getLike() {
            return like;
        }

        public void setLike(String like) {
            this.like = like;
        }
    }
}

请求示例

请求参数说明

{
  "denseSimilarityTopK": null,
  "enableReranking": null,
  "enableRewrite": null,
  "images": null,
  "indexId": "27ubwxxxxx",
  "query": "公司中的男性员工",
  "rerank": null,
  "rerankMinScore": null,
  "rerankTopN": null,
  "rewrite": null,
  "saveRetrieverHistory": null,
  "searchFilters": [
    {
      "姓名": "张三"
    },
    {
      "岗位": "{\"like\":\"技%员\"}"
    }
  ],
  "sparseSimilarityTopK": null
}

响应示例

返回参数说明

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.41137335930387275,
          "_q_score": 1,
          "source": "0",
          "_score": 0.46098726987838745,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "性别": "男",
          "_rc_score": 0,
          "姓名": "张三",
          "doc_name": "员工表",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
          "年龄": "25.0",
          "岗位": "技术员"
        },
        "score": 0.46098726987838745,
        "text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
      }
    ]
  },
  "message": "success",
  "requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
  "status": "200",
  "success": true
}

标签(Tag)查询示例

检索非结构化知识库时,可通过标签筛选文档,提高检索效率与准确性。

示例:创建一个非结构化知识库,其中包含张三、李四和王五三人的信息。

image

以上文档分别添加了以下标签:

文档

标签

文档

标签

张三简历

A大学体育特长生

李四简历

B大学

王五简历

B大学学生会主席

例如使用SearchFilters查询人才知识库,要求返回文档标签含A大学学生会主席的相关文本切片:

多个标签之间是逻辑或(OR)的关系,不是逻辑与(AND)的关系。您可以通过子分组查询实现“逻辑与”
{
  "searchFilters": [
    {
      "tags": "["A大学","学生会主席"]"
    }
  ]
}
您可以展开下方折叠面板查看标签查询的PythonJava示例代码。
Python
Java

TagQueryExample.py

# 示例代码仅供参考,请勿在生产环境中直接使用
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class TagQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # 创建retrieve_request对象。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必填,您可以传入用户实际输入的提示词。
        retrieve_request.query = '请提供一些候选人'
        # 必填,请传入实际的知识库ID。
        retrieve_request.index_id = '请传入实际的知识库ID'
        # 创建一个列表,用于存放标签。多个标签之间是或(OR)的关系,不是与(AND)的关系。
        tags = ["A大学", "学生会主席"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tags)}
        ]
        try:
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    TagQueryExample.main(sys.argv[1:])

请求示例

请求参数说明

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "请提供一些候选人",
  "SearchFilters": "[{\"tags\":\"[\\\"A大学\\\", \\\"学生会主席\\\"]\"}]"
}

响应示例

返回参数说明

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E5%BC%A0%E4%B8%89%E7%AE%80%E5%8E%86_1746760910599.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=roY%2Falbh6smkLdPuA6wjnZRVMa4%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 0.8935035934804278,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "姓名:张三性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "张三简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "姓名:张三性别:男年龄:23"
      },
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E7%8E%8B%E4%BA%94%E7%AE%80%E5%8E%86_1746760946844.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=gTGPTce5xUu9mtcMcmyMEeb5azk%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1592178845871759,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|d4a048b6799ce07e08430f018af091a0|fe90f8248ea64f70ea37c0df7afcfc12",
          "_q_score": 1,
          "source": "0",
          "_score": 0.15737050771713257,
          "title": "",
          "doc_id": "file_63563df5df66488cb8e28bfff11e40eb_10285263",
          "content": "姓名:王五性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "王五简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_63563df5df66488cb8e28bfff11e40eb_10285263_0_0"
        },
        "Score": 0.15737050771713257,
        "Text": "姓名:王五性别:男年龄:23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "12A5F9C6-xxxx-5593-8955-86D52585EE27",
  "Status": 200,
  "Success": true
}

TagQueryExample.java

// 示例代码仅供参考,请勿在生产环境中直接使用
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("请提供一些候选人");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放标签。多个标签之间是或(OR)的关系,不是与(AND)的关系。
            JsonArray array = new JsonArray();
            array.add("A大学");
            array.add("学生会主席");
            Map<String, String> map = new HashMap<>();
            map.put("tags", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
}

请求示例

请求参数说明

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "请提供一些候选人",
  "SearchFilters": "[{\"tags\":\"[\\\"A大学\\\", \\\"学生会主席\\\"]\"}]"
}

响应示例

返回参数说明

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E5%BC%A0%E4%B8%89%E7%AE%80%E5%8E%86_1746760910599.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=roY%2Falbh6smkLdPuA6wjnZRVMa4%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 0.8935035934804278,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "姓名:张三性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "张三简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "姓名:张三性别:男年龄:23"
      },
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E7%8E%8B%E4%BA%94%E7%AE%80%E5%8E%86_1746760946844.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=gTGPTce5xUu9mtcMcmyMEeb5azk%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1592178845871759,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|d4a048b6799ce07e08430f018af091a0|fe90f8248ea64f70ea37c0df7afcfc12",
          "_q_score": 1,
          "source": "0",
          "_score": 0.15737050771713257,
          "title": "",
          "doc_id": "file_63563df5df66488cb8e28bfff11e40eb_10285263",
          "content": "姓名:王五性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "王五简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_63563df5df66488cb8e28bfff11e40eb_10285263_0_0"
        },
        "Score": 0.15737050771713257,
        "Text": "姓名:王五性别:男年龄:23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "12A5F9C6-xxxx-5593-8955-86D52585EE27",
  "Status": 200,
  "Success": true
}

例如使用SearchFilters查询人才知识库,要求返回文档标签含A大学体育特长生的相关文本切片(逻辑与):

{
  "searchFilters": [
    {
      "tags": "['A大学']"
    },
    {
      "tags": "['体育特长生']"
    }
  ]
}
您可以展开下方折叠面板查看标签查询(逻辑与)的PythonJava示例代码。
Python
Java

TagQueryExample2.py

import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient


class TagQueryExample2:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        # 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = f'bailian.cn-beijing.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # 创建retrieve_request对象。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必填,您可以传入用户实际输入的提示词。
        retrieve_request.query = '请提供一些候选人'
        # 必填,请传入实际的知识库ID。
        retrieve_request.index_id = '请传入实际的知识库ID'
        # 创建两个列表,用于存放标签。
        tag1 = ["A大学"]
        tag2 = ["体育特长生"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tag1)},
            {"tags": json.dumps(tag2)}
        ]
        try:
            # 进行检索,传入业务空间ID和retrieve_request对象。
            resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)


if __name__ == '__main__':
    TagQueryExample2.main(sys.argv[1:]) 

请求示例

请求参数说明

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "请提供一些候选人",
  "SearchFilters": "[{\"tags\":\"[\\\"A大学\\\"]\"},{\"tags\":\"[\\\"体育特长生\\\"]\"}]"
}

响应示例

返回参数说明

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E5%BC%A0%E4%B8%89%E7%AE%80%E5%8E%86_1746760910599.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=roY%2Falbh6smkLdPuA6wjnZRVMa4%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 1,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "姓名:张三性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "张三简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "姓名:张三性别:男年龄:23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "1ED6CECE-xxxx-5B21-91DB-410E0219412A",
  "Status": 200,
  "Success": true
}

TagQueryExample2.java

import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample2 {
    /**
     * <b>description</b> :
     * <p>使用AK&SK初始化账号Client</p>
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 请参考 https://api.aliyun.com/product/bailian
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void main(String[] args) {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // 创建RetrieveRequest对象。
            RetrieveRequest request = new RetrieveRequest();
            // 必填,您可以传入用户实际输入的提示词。
            request.setQuery("请提供一些候选人");
            // 必填,请传入实际的知识库ID。
            request.setIndexId("请传入实际的知识库ID");
            // 创建一个JsonArray,用于存放标签。
            JsonArray tag1 = new JsonArray();
            tag1.add("A大学");
            JsonArray tag2 = new JsonArray();
            tag2.add("体育特长生");
            Map<String, String> map1 = new HashMap<>();
            map1.put("tags", tag1.toString());
            Map<String, String> map2 = new HashMap<>();
            map2.put("tags", tag2.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 进行检索,传入业务空间ID和RetrieveRequest。
            RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 知识库检索失败处理。
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            System.out.println(e.getMessage());
        }
    }
}

请求示例

请求参数说明

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "请提供一些候选人",
  "SearchFilters": "[{\"tags\":\"[\\\"A大学\\\"]\"},{\"tags\":\"[\\\"体育特长生\\\"]\"}]"
}

响应示例

返回参数说明

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E5%BC%A0%E4%B8%89%E7%AE%80%E5%8E%86_1746760910599.json?Expires=1747020348&OSSAccessKeyId=LTAI************&Signature=roY%2Falbh6smkLdPuA6wjnZRVMa4%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 1,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "姓名:张三性别:男年龄:23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "张三简历",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "姓名:张三性别:男年龄:23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "1ED6CECE-xxxx-5B21-91DB-410E0219412A",
  "Status": 200,
  "Success": true
}

相关文档

知识库用户指南

请参见知识库

检索知识库

您可以调用Retrieve接口检索知识库并返回文本切片。

子账号调用

RAM用户(子账号)请先获取阿里云百炼的数据权限再调用Retrieve接口,请参见RAM用户授予数据权限

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

  • 本页导读 (1)
  • 效果对比
  • 语法说明
  • 前提条件
  • 完整代码示例
  • 快速开始
  • 子分组查询示例
  • 单值查询示例
  • 多值查询示例
  • 范围查询示例
  • 模糊查询示例
  • 标签(Tag)查询示例
  • 相关文档
  • 错误码
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等