この記事は主に超ミニ全文検索を実現するための PHP redis の関連情報を詳しく紹介します。興味のある方は参考にしてください。
シナリオ: 私たちのプラットフォームには多くのゲームがあります。同僚が特定のゲームについて問い合わせる場合、現在は HTML 選択ドロップダウン リスト表示形式を使用していますが、これは時間も労力もかかります
。効果: 「Three Kingdoms」または「Three Kingdoms」と入力すると、「Three Kingdoms」を含むすべてのゲーム名が自動的にリストされます。入力順序は制限されません。たとえば、「Three Kingdoms」と入力すると、ゲーム「Three Kingdoms」が表示されます。キングダムズ」はまだ見つかります
実装: redis + PHPのarray_intersect()とmbシリーズ関数のコレクションを使用して、超ミニ全文検索機能を実現します
原理: (道は2つまたは3つだけです言葉が長いので、本当のことを言うのは一銭の価値もありません (笑)
1. ゲーム名を読み上げ、単一の漢字に分割します
2. これらの漢字を Redis コレクションのキーとして使用して書き込みます。各コレクションの値は、ゲーム名にこの漢字が含まれるすべてのゲームの ID です
3、ユーザーがテキストを入力すると、ユーザー入力が ajax 非同期リクエストを通じて PHP に渡されます
4。個々の漢字に分割し、redis でこれらの漢字の設定値をそれぞれ見つけます
5. それを取り出して調べます。交差後、同時にこれらの漢字を含むゲームの ID が見つかりました
6最後に、データベースにアクセスして、対応するゲーム情報を見つけます
欠点: データを削除するのが不便です
PHP は Redis に書き込み、コードを取得します:
//自动补全 //不限输入汉字的前后顺序: 输入"国三杀" => 输出 "三国杀" function getAutoComplate() { //$word = $this->input->post('word'); $word = '三国'; if (empty($word)) { exit('0'); } $intWordLength = mb_strlen($word, 'UTF-8'); $this->load->library('iredis'); if (1 == $intWordLength) { $arrGid = $this->iredis->getAutoComplate($word); } else { $arrGid = array(); for ($i=0; $i < $intWordLength; $i++) { $strOne = mb_substr($word, $i, 1, 'UTF-8'); $arrGidTmp = $this->iredis->getAutoComplate($strOne); $arrGid = empty($arrGid) ? $arrGidTmp : array_intersect($arrGid, $arrGidTmp); //求交集,因为传入的参数个数不确定,因此不能直接求交集 } } $arrGame = $this->gamemodel->getGameNameForAutoComplate($arrGid); // var_dump($arrGame);exit; $jsonGame = json_encode($arrGame); exit($jsonGame); } //自动补全, 建立索引 function setAutoComplate() { $arrGame = $this->gamemodel->getAllGameNameForAutoComplate(); $arrIndex = array(); foreach ($arrGame as $gid => $gname) { $intGnameLength = mb_strlen($gname, 'UTF-8'); for ($i=0; $i < $intGnameLength; $i++) { $strOne = mb_substr($gname, $i, 1, 'UTF-8'); $arrIndex[$strOne][] = $gid; } } $this->load->library('iredis'); foreach ($arrIndex as $word => $arrGid) { foreach ($arrGid as $gid) { $this->iredis->setAutoComplate($word, $gid); } } }
Redis の操作方法
//自动补全功能 public function setAutoComplate($key, $value) { $youxikey = 'youxi_'.$key; $this->sAdd($youxikey, $value); } //自动补全功能 public function getAutoComplate($key) { $youxikey = 'youxi_'.$key; return $this->sMembers($youxikey); }
上記は、超ミニ全文検索コード例の PHP Redis 実装の詳細な紹介です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www .php.cn) に注目してください。