排序服务

AI搜索开放平台支持通过Java SDK的方式调用排序服务。

前提条件

已开通AI搜索开放平台服务,具体操作请参见开通服务

已通过API-KEY完成身份鉴权,获取鉴权信息请参见获取API-KEY

参数说明

  • 请求体body最大不能超过8MB。

  • 更多参数说明请参见排序服务

package com.aliyun.sample;

import com.aliyun.searchplat20240529.Client;
import com.aliyun.searchplat20240529.models.GetDocumentRankRequest;
import com.aliyun.searchplat20240529.models.GetDocumentRankResponse;
import com.aliyun.teaopenapi.models.Config;

import java.util.Arrays;

public class RankerDemo {
    public static void main(String[] args) throws Exception {
        Config config = new Config();
        config.setBearerToken("your-api-key: OS-****");
        //endpoint: 配置统一的请求入口 需要去掉http://
        config.setEndpoint("替换API访问地址:****.opensearch.aliyuncs.com");
        config.setProtocol("http");
        Client client = new Client(config);
        GetDocumentRankRequest request = new GetDocumentRankRequest();
        request.setQuery("");
        String[] docs = {"应用: 应用是用户的一套数据配置,包括应用的数据源结构,索引结构及其它一些数据属性配置。一个应用即一个搜索服务。文档:文档是可搜索的结构化数据单元。文档包含一个或多个字段,但必须有主键字段,OpenSearch通过主键值来确定唯一的文档。  主键重复则文档会被覆盖。字段:字段是文档的组成单元,包含字段名称和字段内容","索引:索引是一种用于加速文档检索速度的数据结构,一个用户可以创建多个索引。组合索引:允许用户将多个TEXT、SHORT_TEXT等文本类型的源字段索引到同一个字段,用来做组合索引。如一个论坛搜索,需要提供基于标题(title)的搜索及基于标题(title)和内容(body)的综合搜索,那么可以将title建立title_search、default的索引,将body建立default索引。那么,在title_search上查询即可实现基于标题的搜索,在default上查询即可实现基于标题和内容的综合搜索。默认展示字段;用来做结果展示使用,同时可以通过API参数fetch_fields来控制每次结果的返回字段,需注意在程序中配置fetch_fields该参数后会覆盖应用中默认展示字段配置,以程序中的fetch_fields设置为主,若程序中不设置fetch_fields参数则以应用中默认展示字段为主。分词;对推送上来的文档进行词组切分,TEXT类型为按检索单元进行切分,SHORT_TEXT为按单字进行切分。如“浙江大学”,TEXT类型会切分成2个词组:“浙江”、“大学”。SHORT_TEXT会切分成4个词组:“浙”、“江”、“大”、“学”。Term:分词后的词组称为term。","构建索引:分完词后会进行索引构建操作,以便根据用户查询,快速定位到具体的文档。搜索引擎一般会构建出两种类型的链表:倒排和正排链表。倒排:词组到文档的对应关系组成的链表,query子句用的就是这种排序方式,查询效率高。例如:term1->doc1,doc2,doc3;term2->doc1,doc2正排:文档到字段对应关系组成的链表,filter子句用的就是这种排序方式,性能略慢于倒排。例如:doc1->id,type,create_time…召回:通过用户查询的关键词进行分词,将分词后的词组通过查找倒排链表快速定位到文档,这个过程称为召回。召回量:召回得到的文档数为召回量。","排序表达式:排序表达式是用于控制搜索结果文档排序的数学表达式,支持基本数学运算、数学函数和内置函数。粗排表达式; 对搜索结果进行第一轮的海选, 因为要遍历所有的文档( 目前上限为100万), 所以粗排要尽量简单( 选取对文档最重要的几项内容, 如新闻类可以选用文本性及时效性), 按照表达式对文档进行算分, 并按照算分结果进行排序。 精排表达式; 对第一轮的排序结果选取前N个按照精排表达式进行第二轮更细节的分值计算, 按照分值进行最终的排序, 并返回给用户。 结果摘要: 文本内容一般会很长, 在搜索结果展示的时候可以只展示部分匹配的内容, 方便用户快速了解文档主要内容。 查询分析: 可以配置若干分析规则, 目前支持拼写检查、 停用词、 词权重等功能, 可以让用户更好的干预搜索行为, 获得更好的搜索体验。 "};
        request.setDocs(Arrays.asList(docs));
        GetDocumentRankResponse response = client.getDocumentRank("default","ops-bge-reranker-larger",request);
        System.out.println(response.getStatusCode());
    }
}