利用redis完成自動補全搜尋功能(三)

2021-09-08 18:17:44 字數 1588 閱讀 4212

前面已經完成了分詞和自動提示功能,最後把搜尋結合在一起,來個完成的案例。當然最好還是用搜尋分詞解決,這個只是乙個臨時解決方案。

其實加上搜尋很簡單,要做的就是3件事 

1. 分詞的時候,把有用詞的id存進hash.

dist.php 分詞

<?php

require './redis.php';

//從資料庫取出需要分詞的資料

$words =[

['name'=>'花訊','id'=>1],['name'=>'nba','id'=>2],['name'=>'nba直播','id'=>3],['name'=>'nba賽事','id'=>4],['name'=>'nba季後賽','id'=>5],['name'=>'nba錄影','id'=>6],['name'=>'花訊品牌','id'=>7],['name'=>'花訊**','id'=>8],['name'=>'花','id'=>9],['name'=>'n','id'=>10],['name'=>'nba直播','id'=>11],];

//利用管道

cache::getinstance()->pipeline();

foreach ($words

as$val

)

//分詞加入有序集合

cache::getinstance()->zadd('search',0,$key

); }

}cache::getinstance()->exec

();unset($words

);//

if (!empty($arr

)) );

cache::getinstance()->hmset("search:ids",$arr);}

echo 'ok';

search.php

<?php

require './redis.php';

$key = isset($_get['key']) ? $_get['key'] : 'nba直';

//如果存在 自增1

if (cache::getinstance()->hget("search:hits","*") !== false

) cache::getinstance()->hincrby("search:hits","*",1);

//關鍵字開頭存在有序集合的位置

$index = cache::getinstance()->zrank('search',$key

);if ($index === false

) goto

end;

if ($_res = cache::getinstance()->zrange('search',$index,-1))

}//從hash表中獲取id

$res = cache::getinstance()->hmget("search:ids",$arr

);

//通過id 從mysql 獲取資料源

echo 'ok';

}end:

4. 前端ajax請求獲取資料渲染模板

完整**: 

Redis 實現搜尋關鍵詞自動補全

一 字典型自動補全 redis 的有序集合有乙個特性 score 相同時,是按照字典順序排序的。127.0.0.1 6379 zrange autoc 0 1 1 b 2 ba 3 bar 4 bar 5 f 6 fo 7 foo 8 foo 9 foob 10 fooba 11 foobar 12...

Redis構建自動補全功能案例

方法二方法一通過使用聯絡人列表來記錄使用者最近聯絡過的100個人,並嘗試盡可能減少實現自動補全所需的記憶體。方法二自動補全則為更大的聯絡人列表提供了更好的效能和可擴充套件性,但是所花費的記憶體較多一點。場景 模擬使用者在客戶端輸入聊天物件時,會自動補全顯示使用者已經輸入過的聊天物件名稱。redis主...

使用Mongodb的搜尋拼音自動補全方案

搜尋的自動提示功能能給使用者帶來很好的搜尋體驗,由於中文的特點,如果搜尋自動提示可以支援拼音的話會給使用者帶來更大的方便,免得切換輸入法。目前大多數的電子商務 都支援拼音提示功能。關於多音字 由於中文存在多音字問題 讀音,聲調 例如 調的讀音有diao tiao 長的讀音有chang zhang 所...