全部产品

热搜和底纹

更新时间:2021-02-01 12:01

什么是热搜和底纹

热搜和底纹是一个完整搜索引擎必备的基本功能,通常占据着搜索框入口的重要位置,提供不可或缺的业务价值。我们来看一个典型电商平台的热搜和底纹的位置。

1

一般而言,越上游的环节,对于达成业务目标有着越重要的决定作用,热搜和底纹处于搜索引擎整个工作流程的最上游,如果运营得好,将为后续环节的优化起到非常好的铺垫作用,可以大大降低后续query理解、相关性、排序、运营干预等环节的调优难度,并且结合运营策略对提升业务目标可以有比较大的发挥空间。我们可以站在不同的角度来看待热搜底纹在业务上的价值:

从用户的角度来看,热搜底纹一般可以满足如下的需求:

说明

  1. 我想随便逛逛,不知道搜什么好,能不能给我推荐一些优质的查询词?

  2. 我想知道大家都搜了些什么,随大流不会错

  3. 最好能结合我的兴趣给我推荐query,也要有多样性,我既想看感兴趣的内容,又想探索一些兴趣之外的内容

从运营者的角度,热搜和底纹可以提供这样的价值:

说明
  1. 我们想知道哪些query被搜得最多,热门query是用户兴趣的风向标,通过分析热门query我们可以把握用户的兴趣走向,对制定运营策略,比如促销、补货、做活动等提供一些决策依据

  2. 我们想给用户推荐一些优质query,在用户有输入的情况下,使用下拉提示功能可以对用户意图做引导,但是在用户没有任何输入的时候,如何推荐优质query呢?

  3. 如果给用户推荐热门query,又不能总是固定给出最热的那几个query,需要考虑到多样性,一方面兼顾用户体验,另一方面需要给部分次热门query一些曝光机会

  4. 通过分析用户的行为,结合用户的兴趣来推荐query,既兼顾用户体验,又可以有的放矢的提升业务目标

使用流程

热搜和底纹的使用步骤为:

  1. 创建及训练模型。

  2. 获取热搜/底纹结果。

1. 创建及训练模型

1.1 创建方法:

  • 调用API/SDK创建模型 (api文档链接, SDK Demo请参考下文)

  • OpenSearch控制台界面操作。注:上述两种创建方法,任一方法均可。

温馨提示:

  • 目前热搜与底纹算法模型需要通过统计历史搜索请求中设为 raw_query 的查询词来进行训练,若历史搜索请求没有出现过raw_query,模型可能会创建失败。

  • 目前的算法模型只依赖搜索日志,按照一定算法做统计,暂不支持设定其他训练目标,因此仅需创建模型一次。

  • 系统接收到模型创建请求后,会立刻开始训练模型。

  • 一旦创建模型成功,系统会每天自动重新训练模型,不再需要人为干预。

  • 热搜/底纹模型开启并且已经训练后,可查询半年内任意一个时间段的榜单数据,默认为近14天的榜单数据.

控制台创建热搜和底纹模型

第一步:开启热搜、底纹模型训练:在【功能扩展—->热搜与底纹】页面,选择对应的应用,开启模型训练:1

第二步:模型训练:

2

第三步:热搜、底纹效果预览:

热搜效果预览3底纹效果预览:

3

SDK创建热搜和底纹模型

管控SDK依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-opensearch</artifactId>
    <version>0.7.0</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.0</version>
</dependency>

Java SDK Demo

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.opensearch.model.v20171225.*;
import com.aliyuncs.profile.DefaultProfile;
public class CreateModel {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);
        CreateModelRequest request = new CreateModelRequest();
        request.setAppGroupIdentity("app_name");
 //type为算法类型:热搜设置为hot,底纹设置为hint;modelName为模型名称:自定义,由英文数字、字母、下换线组成,非纯数字,不超过30个字符
        String content = "{\"type\": \"hot\",\"name\": \"model_name\"}";
        request.setHttpContent(content.getBytes(), "UTF-8", FormatType.JSON);
        try {
            HttpResponse response = client.doAction(request);
            System.out.println(response.getHttpContentString());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

2. 获取热搜/底纹结果

在产品中集成热搜和底纹功能,可以通过API/SDK来调用热搜底纹的推荐结果,热搜和底纹api文档。SDK Demo请参考下文。

热搜功能默认返回10个query,底纹功能默认返回3个query,用于在搜索框中轮播。

温馨提示:

  • 目前没有获取算法任务执行状态的接口,需要用户调用API/SDK根据是否有结果来判断是否可使用。

  • 一旦调用创建模型成功后,后续每日系统内部会自动执行算法训练任务,用户每日通过API/SDK获取更新的热搜词即可。

  • 目前通过SDK调用热搜和底纹接口时,hit参数(召回个数)热搜最大是30,底纹最大是10

流量SDK依赖:

<dependency>
    <groupId>com.aliyun.opensearch</groupId>
    <artifactId>aliyun-sdk-opensearch</artifactId>
    <version>3.5.0</version>
</dependency>

Java SDK Demo

import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
public class Hot {
    private static final String accesskey = "替换为accesskey";
    private static final String secret = "替换为secret";
    private static final String host = "替换为endpoint, 例如:http://opensearch-cn-hangzhou.aliyuncs.com";
    private static final String appName = "替换为opensearch应用名";
    private static final String HOT_API_PATH = "/apps/{app_name}/actions/hot";
    public static void main(String[] args) {
        OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
        // Create OpenSearchClient
        OpenSearchClient client = new OpenSearchClient(openSearch);
        String requestPath = HOT_API_PATH.replaceAll(("\\{app_name\\}"), appName);
        Map<String, String> params = new HashMap<>();
        params.put("model_name", "your_model_name");//设置模型名称
        params.put("hit", "20");//设置查询的热搜词数据条数
        try {
            String response = client.call(requestPath, params, OpenSearchClient.METHOD_GET);
            System.out.println(JSON.toJSONString(response));
        } catch (OpenSearchClientException e) {
            e.printStackTrace();
        }
    }
}

效果优化

行为数据

基于统计搜索日志的热搜/底纹结果可以满足冷启动阶段的需求,在这个功能开始发挥作用后,我们建议关联热搜/底纹的用户点击事件,系统内部通过采集行为数据(from_request_iduser_id)来进一步优化效果,采集了行为数据有如下几个收益:

说明

  1. 可以统计得到各项指标,诸如引导搜索的pv、uv、无结果率等,用来衡量这个功能的使用效果,为后续的改进提供依据。

  2. 可以分析用户群的兴趣走向,为制定运营策略提供依据。

  3. 可以采用智能化的手段来推荐query,通过用户的点击行为对数据进行标注,可能根据不同的优化目标来训练模型(默认按点击率优化),通过模型来推荐query,具备较强的泛化能力。

  4. 可以做个性化的热搜词推荐,我们知道了用户点过哪些query,就可以结合用户的偏好做出有针对性的推荐。

热搜/底纹引导搜索流量

API/SDK获取到的热搜/底纹结果中会返回一个request_id, 用于唯一标识这一次请求。通常,如果产品中集成了热搜/底纹结果,当终端用户点击了热搜词或底纹词后,便会以该热搜词或底纹词作为搜索词触发一次搜索请求,通过在搜索请求中将from_request_id参数设置为热搜/底纹结果返回的request_id,就可以关联这一次用户点击行为,后台通过搜索日志分析和统计了这些点击行为,就可以在业务运营报表中看到由热搜/底纹引导的搜索流量指标。如果在搜索请求中设置了user_id参数,业务运营报表中还可以看到热搜/底纹引导的搜索UV指标。

温馨提示:

  • 由于搜索的翻页请求也会被认为是独立的搜索PV,所以对于热搜/底纹引导的搜索请求翻页时候,也同样要设置from_request_id参数。

  • 搜索请求的参数详情,请查阅from_request_iduser_id的参数说明。

业务运营报表

界面

可以通过【功能扩展—->热搜与底纹】,“查看指标”进入热搜底纹的运营报表,也可以直接在“报表统计—->热搜报表/底纹报表里”里查:

热搜1底纹2注意

  • 热搜报表对应指标介绍可点击此处进行查看。

  • 底纹报表对应指标介绍可点击此处进行查看。