搜索建議和糾錯(cuò)

2019-08-14 14:14 更新

這項(xiàng)功能也是建立在搜索日志的基礎(chǔ)上。

1. 拼寫糾錯(cuò)

對(duì)于英文,由于打字速度過(guò)快或各種原因都很容易造成一兩個(gè)字母出錯(cuò)。對(duì)于中文來(lái)說(shuō),古代就動(dòng)不動(dòng) 出現(xiàn)同音”通假字“,絕大多數(shù)現(xiàn)代人也使用拼音輸入法,加上方言口音,亂用同音字現(xiàn)象非常普遍。

所以系統(tǒng)在綜合分析索引庫(kù)內(nèi)的詞匯、用戶搜索日志基礎(chǔ)上建立了一個(gè)龐大的糾錯(cuò)體系,支持英文拼寫 糾錯(cuò)、中文同音字糾錯(cuò)、拼音轉(zhuǎn)換等。

使用這些功能都非常簡(jiǎn)單,直接調(diào)用 XSSearch::getCorrectedQuery 即可,該方法接受搜索語(yǔ)句 作為參數(shù),如省略參數(shù)則直接使用最近一次 setQuery 的語(yǔ)句,返回值是修正詞匯組成的數(shù)組,若 沒(méi)有更合適的修正方案則返回空數(shù)組。

// 假設(shè)在本意是在 demo 項(xiàng)目中搜索 "測(cè)試",但不小心打成了 "側(cè)試"
$search->setQuery('側(cè)試');$docs = $search->search();  
 
// 由于拼寫錯(cuò)誤,這種情況返回的數(shù)據(jù)量可能極少甚至沒(méi)有,因此調(diào)用下面方法試圖進(jìn)行修正
$corrected = $search->getCorrectedQuery();if (count($corrected) !== 0){
// 有糾錯(cuò)建議,列出來(lái)看看;此情況就會(huì)得到 "測(cè)試" 這一建議
echo "您是不是要找:\n";   
foreach ($corrected as $word){
      echo $word . "\n";   }
}
/** 
 * 以下拼寫示例則簡(jiǎn)化,并直接傳入 Query 語(yǔ)句進(jìn)行測(cè)試 
 * 您也可以例句用 `util/Quest.php demo --correct <word>` 進(jìn)行測(cè)試 
*/
$search->getCorrectedQuery('cs');  // 通過(guò)聲母縮寫得到建議: "測(cè)試"
$search->getCorrectedQuery('ceshi');  // 通過(guò)全拼縮寫得到建議: "測(cè)試"
$search->getCorrectedQuery('yunsearch'); // 通過(guò)拼寫糾錯(cuò)得到: xunsearch
$search->getCorrectedQuery('xunseach 側(cè)試'); // 混合糾錯(cuò)得到: xunsearch測(cè)試

Tip: 建議在搜索結(jié)果數(shù)量過(guò)少或沒(méi)有時(shí)再嘗試進(jìn)行拼寫糾錯(cuò),而不是每次搜索都進(jìn)行。

2. 搜索建議

搜索建議是指類似百度那樣,當(dāng)用戶在搜索框輸入少量的字、拼音、聲母時(shí)提示用戶一些相關(guān)的 熱門關(guān)鍵詞列表下拉框供用戶選擇。

這樣做非常有利于節(jié)省用戶的打字時(shí)間、提升用戶體驗(yàn)。

我們通過(guò) XSSearch::getExpandedQuery 來(lái)讀取展開(kāi)的搜索詞,該方法返回展開(kāi)的搜索詞組成的 數(shù)組,如果沒(méi)有任何可用詞則返回空數(shù)組。接受 2 個(gè)參數(shù):

  • $query 要展開(kāi)的搜索詞,返回結(jié)果是以這個(gè)搜索詞為前綴、拼音前綴展開(kāi),此為必要參數(shù)

  • $limit 整數(shù)值,設(shè)置要返回的詞數(shù)量上限,默認(rèn)為 10,最大值為 20

/**
 * 以下例子也可以用 `util/Quest.php demo --suggest <word>` 進(jìn)行測(cè)試 
*/
$search->getExpandedQuery('x'); // 返回:項(xiàng)目, xunsearch, 行為, 項(xiàng)目測(cè)試
$search->getExpandedQuery('xm'); // 返回:項(xiàng)目, 項(xiàng)目測(cè)試
$search->getExpandedQuery('項(xiàng)'); // 返回:項(xiàng)目, 項(xiàng)目測(cè)試
$search->getExpandedQuery('項(xiàng)目'); // 返回:項(xiàng)目測(cè)試

Tip: 實(shí)際使用過(guò)程中,搜索建議通常單獨(dú)設(shè)計(jì)一個(gè)入口腳本,再在主搜索界面的搜索框中通過(guò) ajax、AutoComplete 等 JavaScript 技術(shù)來(lái)根據(jù)用戶的輸入動(dòng)態(tài)載入建議詞列表。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)