全部產品
Search
文件中心

OpenSearch:下拉提示

更新時間:Jul 13, 2024

下拉提示是搜尋服務的基礎功能,在使用者輸入查詢詞的過程中,智能推薦候選query,提高使用者輸入效率,協助使用者儘快找到想要的內容。

功能介紹

下拉提示是搜尋服務的基礎功能,在使用者輸入查詢詞的過程中,智能推薦候選query,提高使用者輸入效率,協助使用者儘快找到想要的內容。

下拉提示實現了基於使用者文檔內容的query智能抽取,可以通過中文首碼,拼音全拼,拼音首字母簡拼查詢以及漢字加拼音,分詞後首碼,中文同音別字等查詢下拉提示的候選query。

例如:連衣裙長款 這個query,可以通過如下方式查詢得到:

  • 中文首碼:連, 連衣, …

  • 全拼首碼:l, li, lian, lianyi, lianyiqun, …

  • 簡拼首碼:l, ly, lyq, …

  • 漢字加拼音:連yi, 連衣qun, …

  • 分詞後首碼:長款, 長款連衣, 連衣長, …

  • 中文同音別字: 連衣群, 聯誼群, …

此外,使用者可以通過幹預詞條對下拉提示的資料進行幹預。可以看到下拉提示的多項業務指標,詳見下拉提示報表

使用須知

資料來源

下拉提示資料主要來源於應用文檔。每個下拉提示最多可以從一個應用中選擇3個欄位作為資料來源。處理時,系統會選取應用中的部分文檔(百萬層級),對這些文檔中被選中的欄位按照指定的規則進行處理,產生下拉提示的候選資料。之後再按一定規則保留一定量的資料作為下拉提示候選query。

query建置規則

對於候選query的建置規則,我們針對過去N(預設7天)的歷史query,結合該query的詞權重,召回結果數,歷史搜尋次數,近一天查詢是否有結果等條件,選出一些熱門歷史查詢詞,作為下拉提示的候選詞。系統支援兩種規則產生候選query:抽取產生原值保留

  • 抽取產生:使用阿里nlp團隊基于海量自然語言訓練的分析器,對欄位內容進行分詞,抽取有意義的term進行組合,得到候選query,這種方式盡量保證產生的候選query能召回對應的文檔。

  • 原值保留:該規則對欄位內容不做分詞處理,直接將其作為下拉提示的候選query。但當欄位內容超過一定限制(30個字元)時,將截斷欄位,保留前30個字元的內容作為候選query。這種方式適用於不需要分詞的應用欄位(店鋪名,使用者名稱,歌曲名等)或者使用者自己產生候選query,直接原樣展示。建議使用內容較短且含義明確的欄位。

注意:
抽取的候選query為,過去N天(預設七天)的歷史搜尋請求和攜帶raw_query參數的請求。

人工幹預

下拉提示支援的幹預項包括:

  • 對候選query結果進行幹預,包括黑名單和白名單。

  • 對資料來源應用文檔設定過濾條件,配置過濾條件後,只會使用符合該過濾條件的應用文檔產生下拉提示候選詞。

參數名稱

說明

過濾條件

需填寫OpenSearch應用表結構欄位,該過濾條件作用於當前服務中的應用全量文檔資料。注意

  • 比較符支援:<、>、<=、>=、=、!=

  • 支援的欄位類型:數值、字元型,不支援array類型

  • 串連符:多個過濾條件之間為AND關係,必須要使用英文逗號(,)分隔,表示且關係(暫不支援或關係)。

舉例:當過濾條件為 status=1,level=1 時,則只能選取符合該條件的記錄。

控制台配置如下圖所示:

截圖1

候選query結果乾預

黑名單:黑名單中的關鍵詞支援包含匹配,包含黑名單關鍵詞的query將不會出現在下拉提示結果中。因此,當下拉提示結果中出現一些業務上不想要的結果時,可將關鍵詞添加到下拉提示黑名單中,實現對這些結果的屏蔽。

白名單:當白名單中的query滿足推薦條件時,將優先在下拉提示中顯示。因此,當某些優質query沒有被識別出來,或者排序靠後時,可將其加到白名單中,實現更好的下拉提示效果。**黑名單和白名單的具體配置,可點擊此處進行查看。

重要

  • 標準版應用類型,不支援下拉提示。僅進階版應用支援;

  • 單個應用最多建立10個下拉提示模型;

  • 下拉提示的名稱限制:同一使用者不可設定名稱相同的模型(包括下拉提示、人氣模型、類目預測、熱搜、底紋);

  • 下拉提示僅支援從一個應用中選擇建立了索引的TEXT、SHORT_TEXT、LITERAL、INT類型的欄位作為資料來源;

  • 同一個模型最多可選擇 3 個訓練欄位;

  • 修改應用結構時,不能修改下拉提示資料來源的欄位;

  • 下拉提示模型訓練時,需要保證應用表資料量(raw_query和應用中儲存的資料總和)大於1000,否則模型可能因資料完整性問題導致模型訓練失敗;

  • 刪除應用時,對應的下拉提示也會被刪掉;

  • 下拉提示搜尋時,query參數長度最大支援30個位元組,utf-8 編碼,最多10個漢字,否則會報錯,返回無結果;

  • 下拉提示搜尋時,hit參數的取值範圍為(0, 10]的整數,否則按預設10處理,且會返回一個錯誤(例:當hit設定了0或-1或11時,預設按10處理並返回一個錯誤。);

  • 黑名單中的關鍵詞條數不能超過500;

  • 白名單中的query條數不能超過500;

  • 黑名單和白名單資料有衝突時,黑名單的屏蔽優先順序更高;

  • 黑名單和白名單的修改均可即時生效;

  • 下拉提示模型建立之後系統預設開啟每天定時模型訓練,下拉提示的資料隨模型的定時訓練周期性更新;

  • 下拉提示的訓練的時間和應用的資料量、系統負載有關;如果長時間(大於半個小時)沒有訓練結束,請聯絡我們;

  • “中文同音別字”補全召回功能已預設生效,可以在請求中添加參數re_search="disable"關閉該功能;

  • 目前下拉提示的基礎功能是免費的,因此計算資源和儲存資源為系統統一設定。每個下拉提示的計算資源約為100QPS,儲存資源約200W個候選query;

  • 建議在搜尋請求中設定raw_query參數,便於資料處理時識別終端使用者輸入的原始查詢詞,詳見搜尋處理文檔

  • 開啟歷史搜尋字詞功能,將按照每次訓練消耗的計算時收取訓練費用,詳情請參考 計費說明

  • raw_queryuser_idfrom_request_id參數介紹可點擊此處進行查看;

  • 高頻搜尋字詞功能預設開啟的前提條件:搜尋請求時攜帶raw_query參數或query子句中包含default索引。

  • 獨立raw_query:訓練晉陞條件中的raw_query是搜尋請求時需要攜帶的參數,並且要求是獨立的、有召回結果的、非重複的query查詢詞

使用建議

  • 為進一步提升下拉提示效果(提升下拉提示引導搜尋量、搜尋結果點擊率等),強烈建議將下拉提示請求與搜尋請求關聯。關聯方法見文尾:下拉提示請求與搜尋請求關聯部分;

  • 選擇內容簡潔,和文檔主題相關的欄位;

  • 合理使用抽取產生和原值保留規則;

  • 查詢結果中,suggestions是本次查詢的結果,errors表示本次查詢是否有錯誤發生。errors不為空白,不代表suggestions為空白。因此,解析結果時,需要通過suggestions是否為空白來判斷是否無資料展示。

流程示範

1.搜尋演算法中心—->搜尋引導—->下拉提示,點擊“建立”:image

2.輸入“模型名稱”、選擇“訓練欄位”及抽取方式、選擇是否開啟歷史搜尋字詞【可選】、輸入“過濾條件”【可選】,點擊“完成”:image

3.在下拉提示列表頁,點擊“訓練模型”,訓練已建立的模型:

image

4.下拉提示模型開啟訓練後,需要20-30分鐘左右的訓練時間;

5.下拉提示模型訓練完成後,可以進行下拉提示效果測試,圖中分別為“抽取”以及“原值保留”的兩種抽取方式的效果測試:

原值保留6

抽取7

6.線上查詢候選詞,見下面Demo。介面詳細說明見下拉提示開發指南

下拉提示頁面介紹

下拉提示列表頁介紹

當使用者通過OpenSearch控制台:搜尋演算法中心—->搜尋引導—->下拉提示,進入下拉提示列表頁(如下圖):image

列表頁中顯示下拉提示模型的“模型名稱”、“建立時間”、“模型狀態”、“近一次訓練狀態”(包括待訓練、訓練中、已訓練並通過、資料異常四種狀態)等資訊。操作欄中可對模型進行模型詳細查看、訓練模型、刪除模型等操作。

下拉提示模型詳情頁介紹

image基本資料中主要展示了模型建立時間、模型狀態、最後訓練開始時間、最新版本狀態(如果為資料異常狀態,則會在表格後展示“異常報告”懸浮窗)。

配置資訊中主要展示了模型配置的訓練欄位、過濾條件以及黑/白名單、定時訓練以及歷史搜尋字詞。

資料校正中主要展示模型訓練的資料完整度以及完整度等級。

訓練歷史中主要展示該模型的訓練記錄。

核心指標資料

可選擇不同的時間區間,以表格和折線圖的形式展示下拉提示模型的核心指標資料

注意:具體指標含義,可參考下拉提示報表

下拉提示 SDK 示範

API

GET v3/openapi/suggestions/{suggestion_name}/actions/search?hit=10&query={your_query}&re_search=homonym&user_id=xxx

Java SDK的Maven依賴:

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

相關連結:版本說明

代碼示範:

package com.example.opensearch;

import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.SuggestionClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.nio.charset.Charset;

public class SuggestDemo {
    static private final String accesskey = "填入accesskey資訊";
    static private final String secret = "填入secret資訊";
    static private final String host = "填入下拉提示關聯應用所在地區的host";
    OpenSearch openSearch;
    OpenSearchClient openSearchClient;
    static private final byte hits = 8; //最大返回下拉提示的條數
    static private final String suggestionName = "填入下拉提示名稱"; //填入下拉提示名稱

    @Before
    public void setUp() {
        //初始化openSearch對象
        openSearch = new OpenSearch(accesskey, secret, host);
        openSearchClient = new OpenSearchClient(openSearch);
    }

    @Test
    public void TestEnv() {
        //查看檔案和預設編碼格式
        System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
        System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));

        //建立下拉提示對象
        SuggestionClient suggestionClient = new SuggestionClient(suggestionName, openSearchClient);
        String query = "填入查詢詞";
try {
            SuggestParams suggestParams = new SuggestParams();
            suggestParams.setQuery(query); //設定查詢詞
            suggestParams.setHits(10); //設定最大返回下拉提示的條數
            suggestParams.setUserId("12345678"); //設定user_id
            //“中文同音別字”補全召回功能已預設生效,可以在請求中添加參數re_search進行調整
            //ReSearch.findByValue(1)表示禁用;ReSearch.findByValue(0)或者不傳該參數表示開啟
            suggestParams.setReSearch(ReSearch.findByValue(1));
            SearchResult result = suggestionClient.execute(suggestParams); 
            System.out.println(result); //列印召回的結果
        } catch (OpenSearchException e) {
            e.printStackTrace();
        } catch (OpenSearchClientException e) {
            e.printStackTrace();
        }
    }

    @After
    public void clean() {
        openSearch.clear();
    }
}

下拉提示的Java SDK的詳情可參考:下拉提示demo

召回結果展示

{
  "request_id": "159851481919726888064081",
  "searchtime": 0.006246,
  "suggestions": [
    {
      "suggestion": "裙子潮"
    },
    {
      "suggestion": "裙子小個子 連衣裙"
    },
    {
      "suggestion": "裙子 波點連衣裙"
    },
    {
      "suggestion": "裙子 減齡"
    },
    {
      "suggestion": "裙子 波點"
    },
    {
      "suggestion": "裙子小個子"
    },
    {
      "suggestion": "裙子小個子波點"
    }
  ]
}

注意:召回結果返回的requestID,可以用於搜尋請求的關聯。

下拉提示請求與搜尋請求關聯

將下拉提示請求和搜尋請求關聯起來後,對業務有如下協助:

  1. 可以統計出一些指標,用于衡量下拉提示對搜尋的效果。指標包括:下拉提示引導搜尋pv,引導搜尋點擊率,引導搜尋無/少結果率等,更多詳細指標見下拉提示報表

  2. 基於關聯請求資料,得到下拉提示點擊結果等資料,最佳化下拉提示排序模型,進而提升下拉提示引導搜尋的效果。

    關聯方法:

    在opensearch app search請求中,如果此次請求是由下拉提示引導的,則在search請求中帶上參數from_request_id={from_request_id}其中from_request_id表示:本搜尋請求從哪裡引導而來,如果當前的query來自下拉提示、熱詞、底紋等功能的推薦列表,那麼請求這個推薦列表的request_id可以賦給這個參數,通過關聯這個引導事件,可以計算上遊功能的各項指標,衡量使用效果,為最佳化功能提供依據。搜尋處理文檔中也有此參數說明。

舉例:

通過下拉提示API 查詢出來的結果中的requestID是:159851481919726888064081,如下如果想關聯搜尋請求,可參考:

SearchParams searchParams = new SearchParams(config);
searchParams.setQuery("title:'裙子小個子'"); //通過下拉提示引導的

///添加from_request_id參數
Map<String, String> customParam =new HashMap<>();
customParam.put("from_request_id","159851481919726888064081");
searchParams.setCustomParam(customParam);

//執行查詢語句返回資料對象
SearchResult execute = searcherClient.execute(searchParams);
//以字串返回查詢資料
String result = execute.getResult();
System.out.println(result);