Cet article présente principalement les informations pertinentes de PHP redis pour implémenter en détail la super mini récupération de texte intégral. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Scénario : Là. Il existe de nombreux jeux sur notre plateforme. Lorsque les collègues opérationnels interrogent un certain jeu, ils utilisent actuellement le format d'affichage de liste déroulante de sélection HTML. Les collègues opérationnels doivent les trouver un par un puis les sélectionner, ce qui prend du temps et. accrocheur.
Effet : Entrez « Trois Royaumes » ou « Trois Royaumes », tous les noms de jeux contenant « Trois Royaumes » seront automatiquement répertoriés et l'ordre de saisie n'est pas limité ; par exemple, si vous saisissez "Kill Three Kingdoms", le résultat sera toujours Je trouverai le jeu "Three Kingdoms"
Implémentation : J'utilise les fonctions array_intersect() et mb series de redis de PHP pour implémenter une super mini fonction de recherche en texte intégral
Principe : (La vérité n'est que deux ou trois mots, ça ne vaut pas un centime de dire la vérité, haha)
1. Lisez tous les noms de jeux et divisez-les en caractères chinois individuels
2 Utilisez ces caractères chinois comme clés de la collection redis et écrivez-les dans redis. l'ID de tous les jeux dont les noms de jeu contiennent ce caractère chinois
3 Lorsque l'utilisateur saisit du texte Lors de l'utilisation d'une requête asynchrone ajax, la saisie de l'utilisateur est transmise à PHP
4. en caractères chinois individuels et trouvez les valeurs définies de ces caractères chinois dans redis respectivement
5. Sortez, trouvez l'intersection et trouvez l'ID du jeu qui contient ces caractères chinois en même temps. temps
6. Enfin, allez dans la base de données pour trouver les informations de jeu correspondantes
Inconvénients : La suppression des données n'est pas pratique
Code PHP pour écrire dans redis et récupération :
//自动补全 //不限输入汉字的前后顺序: 输入"国三杀" => 输出 "三国杀" 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); } } }
Méthodes pour faire fonctionner redis
//自动补全功能 public function setAutoComplate($key, $value) { $youxikey = 'youxi_'.$key; $this->sAdd($youxikey, $value); } //自动补全功能 public function getAutoComplate($key) { $youxikey = 'youxi_'.$key; return $this->sMembers($youxikey); }
Ce qui précède est l'introduction détaillée de l'implémentation PHP redis d'un super mini exemple de code de récupération de texte intégral. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois ( www.php.cn) !