現代用戶習慣在輸入過程中即時看到結果(Search-as-you-type),這不僅提升響應速度,還能引導用戶輸入索引中真實存在的詞彙。例如輸入 "johnnie walker bl" 時,即時展示 "Johnnie Walker Black Label" 與 "Blue Label"。
無需額外數據準備,直接在全文字段使用 match_phrase_prefix:
{
"match_phrase_prefix": {
"brand": "johnnie walker bl"
}
}
行為邏輯:將查詢字符串最後一個詞視為前綴,前面的詞需精確順序匹配。上例等價於查找 "johnnie" 緊接 "walker" 緊接以 "bl" 開頭的詞。
同 match_phrase,支持 slop 允許詞位置偏移:
{
"match_phrase_prefix": {
"brand": {
"query": "walker johnnie bl",
"slop": 10
}
}
}
但最後一個詞始終作為前綴處理。
前綴 "a" 可能匹配海量詞條,消耗資源且結果無意義。通過 max_expansions 限制擴展數量:
{
"match_phrase_prefix": {
"brand": {
"query": "johnnie walker bl",
"max_expansions": 50
}
}
}
機制:按字典序收集前綴匹配詞條,達到上限即停止。記住:每次按鍵都會觸發查詢,必須極快返回;若首輪結果不滿意,用戶會繼續輸入。