下拉提示是搜索服務的基礎功能,在用戶輸入查詢詞的過程中,智能推薦候選query,提高用戶輸入效率,幫助用戶盡快找到想要的內容。
功能介紹
下拉提示是搜索服務的基礎功能,在用戶輸入查詢詞的過程中,智能推薦候選query,提高用戶輸入效率,幫助用戶盡快找到想要的內容。
下拉提示實現了基于用戶文檔內容的query智能抽取,可以通過中文前綴,拼音全拼,拼音首字母簡拼查詢以及漢字加拼音,分詞后前綴,中文同音別字等查詢下拉提示的候選query。
例如:連衣裙長款 這個query,可以通過如下方式查詢得到:
中文前綴:
連, 連衣, …
全拼前綴:
l, li, lian, lianyi, lianyiqun, …
簡拼前綴:
l, ly, lyq, …
漢字加拼音:
連yi, 連衣qun, …
分詞后前綴:
長款, 長款連衣, 連衣長, …
中文同音別字:
連衣群, 聯誼群, …
此外,用戶可以通過干預詞條對下拉提示的數據進行干預??梢钥吹较吕崾镜亩囗棙I務指標,詳見下拉提示報表。
使用須知
數據來源
下拉提示數據主要來源于應用文檔。每個下拉提示最多可以從一個應用中選擇3個字段作為數據來源。處理時,系統會選取應用中的部分文檔(百萬級別),對這些文檔中被選中的字段按照指定的規則進行處理,生成下拉提示的候選數據。之后再按一定規則保留一定量的數據作為下拉提示候選query。
query生成規則
對于候選query的生成規則,我們針對過去N(默認7天)的歷史query,結合該query的詞權重,召回結果數,歷史搜索次數,近一天查詢是否有結果等條件,選出一些熱門歷史查詢詞,作為下拉提示的候選詞。系統支持兩種規則生成候選query:抽取生成和原值保留。
抽取生成:使用阿里nlp團隊基于海量自然語言訓練的分析器,對字段內容進行分詞,抽取有意義的term進行組合,得到候選query,這種方式盡量保證生成的候選query能召回對應的文檔。
原值保留:該規則對字段內容不做分詞處理,直接將其作為下拉提示的候選query。但當字段內容超過一定限制(30個字符)時,將截斷字段,保留前30個字符的內容作為候選query。這種方式適用于不需要分詞的應用字段(店鋪名,用戶名,歌曲名等)或者用戶自己生成候選query,直接原樣展示。建議使用內容較短且含義明確的字段。
注意:
抽取的候選query為,過去N天(默認七天)的歷史搜索請求和攜帶raw_query參數的請求。
人工干預
下拉提示支持的干預項包括:
對候選query結果進行干預,包括黑名單和白名單。
對數據源應用文檔設置過濾條件,配置過濾條件后,只會使用符合該過濾條件的應用文檔生成下拉提示候選詞。
參數名稱 | 說明 |
過濾條件 | 需填寫OpenSearch應用表結構字段,該過濾條件作用于當前服務中的應用全量文檔數據。注意:
舉例:當過濾條件為 status=1,level=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_query、user_id、from_request_id參數介紹可點擊此處進行查看;
高頻搜索詞功能默認開啟的前提條件:搜索請求時攜帶raw_query參數或query子句中包含default索引。
獨立raw_query:訓練晉升條件中的raw_query是搜索請求時需要攜帶的參數,并且要求是獨立的、有召回結果的、非重復的query查詢詞;
使用建議
為進一步提升下拉提示效果(提升下拉提示引導搜索量、搜索結果點擊率等),強烈建議將下拉提示請求與搜索請求關聯。關聯方法見文尾:下拉提示請求與搜索請求關聯部分;
選擇內容簡潔,和文檔主題相關的字段;
合理使用抽取生成和原值保留規則;
查詢結果中,suggestions是本次查詢的結果,errors表示本次查詢是否有錯誤發生。errors不為空,不代表suggestions為空。因此,解析結果時,需要通過suggestions是否為空來判斷是否無數據展示。
流程演示
1.搜索算法中心—->搜索引導—->下拉提示,點擊“創建”:
2.輸入“模型名稱”、選擇“訓練字段”及抽取方式、選擇是否開啟歷史搜索詞【可選】、輸入“過濾條件”【可選】,點擊“完成”:
3.在下拉提示列表頁,點擊“訓練模型”,訓練已創建的模型:
4.下拉提示模型開啟訓練后,需要20-30分鐘左右的訓練時間;
5.下拉提示模型訓練完成后,可以進行下拉提示效果測試,圖中分別為“抽取”以及“原值保留”的兩種抽取方式的效果測試:
原值保留:
抽取:
6.在線查詢候選詞,見下面Demo。接口詳細說明見下拉提示開發指南。
下拉提示頁面介紹
下拉提示列表頁介紹
當用戶通過開放搜索控制臺:搜索算法中心—->搜索引導—->下拉提示,進入下拉提示列表頁(如下圖):
列表頁中顯示下拉提示模型的“模型名稱”、“創建時間”、“模型狀態”、“近一次訓練狀態”(包括待訓練、訓練中、已訓練并通過、數據異常四種狀態)等信息。操作欄中可對模型進行模型詳細查看、訓練模型、刪除模型等操作。
下拉提示模型詳情頁介紹
基本信息中主要展示了模型創建時間、模型狀態、最后訓練開始時間、最新版本狀態(如果為數據異常狀態,則會在表格后展示“異常報告”懸浮窗)。
配置信息中主要展示了模型配置的訓練字段、過濾條件以及黑/白名單、定時訓練以及歷史搜索詞。
數據校驗中主要展示模型訓練的數據完整度以及完整度等級。
訓練歷史中主要展示該模型的訓練記錄。
核心指標數據
可選擇不同的時間區間,以表格和折線圖的形式展示下拉提示模型的核心指標數據
注意:具體指標含義,可參考下拉提示報表。
下拉提示 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,可以用于搜索請求的關聯。
下拉提示請求與搜索請求關聯
將下拉提示請求和搜索請求關聯起來后,對業務有如下幫助:
可以統計出一些指標,用于衡量下拉提示對搜索的效果。指標包括:下拉提示引導搜索pv,引導搜索點擊率,引導搜索無/少結果率等,更多詳細指標見下拉提示報表。
基于關聯請求數據,得到下拉提示點擊結果等數據,優化下拉提示排序模型,進而提升下拉提示引導搜索的效果。
關聯方法:
在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);