情景:我們平台有好多遊戲, 運營的同事在查詢某一款遊戲的時候, 目前使用的是html的select下拉列表的展現形式, 運營的同事得乙個個去找,然後選中,耗時又費眼
效果:輸入"三國"或者程式設計客棧"國三", 將自動列出所有包含"三國"的遊戲名字, 輸入不限順序; 例如輸入"殺三國",仍然會將"三國殺"這款遊戲找出來
實現:我用redis的集合+php的array_intersect()和mb系列函式, 實現了乙個超迷你的全文檢索功能
原理:(大道不過兩三言,說穿不值一文錢,哈哈)
1、將所有的遊戲名字讀出來,拆分成單個漢字
2、 將這些漢字作為redis集合的鍵,寫入redis,每個集合裡的值是所有那些遊戲名字中包含此漢字的遊戲的id
3、當使用者輸入文字的時候通過ajax非同步請求,將使用者輸入傳給php
4、將輸入的文字拆分成單個漢字, 分別找到這些漢字在redis中的集合值
5、取出來,求交集,就找到了同時包含這幾個漢字的遊戲的id
6、最後到資料庫裡查出來相應的遊戲資訊即可
缺點:刪除資料不方便
php寫入redis和檢索的**:
//自動補全
//不限輸入漢字的前後順序: 輸入"國三殺" => 輸出 "三國殺"
function getautocomplate()
$intwordlength = mb_strlen($word, 'utf-8');
$this->load->library('iredis');
if (1 == $intwordlength) else
}$arrgame = $this->gamemodel->getgamenameforautocomplate($arrgid);
// var_dump($arrgame);exit;
$jsongame = json_encode($arrgame);
exit($jsongame);
} //自動補全, 建立索引
function setautocomplate()
}$this->load->library('iredis');
foreach ($arrindex as $word => $arrgid) } }
操作redis的方法
//自動補全功能
public function setautocomplate($key, $value)
//自動補全功能
public function getautocomplate($key)
本文標題: php redis實現超迷你全文檢索
本文位址: /wangluo/php/181123.html
PHP redis實現超迷你全文檢索
2014年10月31日 11 45 39 情景 我們平台有好多遊戲,運營的同事在查詢某一款遊戲的時候,目前使用的是html的select下拉列表的展現形式,運營的同事得乙個個去找,然後選中,耗時又費眼 效果 輸入 三國 或者 國三 將自動列出所有包含 三國 的遊戲名字,輸入不限順序 例如輸入 殺三國...
php redis實現訊息佇列
參考 參考 訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它 應用場景 非同步處理,應用解耦,流量削鋒和訊息通訊四個場景 1 非同步處...
php redis實現延遲佇列
基於redis有序集實現延遲任務執行,比如某個時間給某個使用者發簡訊,訂單過期處理,等等 我是在tp5框架上寫的,實現起來很簡單,對於一些不是很複雜的應用足夠了,目前在公司專案中使用,後台程序並沒有實現多程序,不多說,貼 不回排版,見諒 1 命令列指令碼 執行方法 php think delay q...