Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in das Codebeispiel des Super-Mini-Volltextabrufs mit PHP Redis

Detaillierte Einführung in das Codebeispiel des Super-Mini-Volltextabrufs mit PHP Redis

黄舟
黄舟Original
2017-03-06 09:25:451445Durchsuche

Dieser Artikel stellt hauptsächlich die relevanten Informationen von PHP Redis zur Implementierung des Super-Mini-Volltextabrufs im Detail vor. Interessierte Freunde können sich auf

Szenario beziehen: Dort Es gibt viele Spiele auf unserer Plattform. Wenn die Betriebskollegen ein bestimmtes Spiel abfragen, verwenden sie derzeit das HTML-Auswahl-Dropdown-Listen-Anzeigeformat. Die Betriebskollegen müssen sie einzeln finden und dann auswählen, was zeitaufwändig ist auffällig.

Effekt: Geben Sie „Three Kingdoms“ oder „Three Kingdoms“ ein. Alle Spielnamen, die „Three Kingdoms“ enthalten, werden automatisch aufgelistet und die Eingabereihenfolge ist nicht eingeschränkt. Wenn Sie beispielsweise „Töte drei Königreiche“ eingeben, lautet das Ergebnis immer noch „Ich finde das Spiel „Drei Königreiche““

Implementierung: Ich verwende die Redis-Sammlung + PHPs array_intersect() und Funktionen der MB-Serie zur Implementierung einer Super-Mini-Volltextsuchfunktion

Prinzip: (Die Wahrheit ist nur zwei oder drei Wörter lang, es ist keinen Cent wert, die Wahrheit zu sagen, haha)

1. Lesen Sie alle Spielnamen vor und teilen Sie sie in einzelne chinesische Zeichen auf.

2. Verwenden Sie diese chinesischen Zeichen als Schlüssel der Redis-Sammlung und schreiben Sie sie in Redis Die Sammlung ist die ID aller Spiele, deren Namen dieses chinesische Zeichen enthalten.

3 Wenn der Benutzer beim Schreiben von Text die Benutzereingaben über eine asynchrone Ajax-Anfrage weiterleitet Geben Sie Text in einzelne chinesische Zeichen ein und suchen Sie die festgelegten Werte dieser chinesischen Zeichen in Redis.

5 Nehmen Sie es heraus, suchen Sie den Schnittpunkt und finden Sie die ID des Spiels, das diese chinesischen Zeichen enthält gleichzeitig

6. Gehen Sie abschließend zur Datenbank, um die entsprechenden Spielinformationen zu finden

Nachteile:

Das Löschen von Daten ist umständlichPHP-Code für Schreiben an Redis und Abrufen:


//自动补全
  //不限输入汉字的前后顺序: 输入"国三杀" => 输出 "三国杀"
  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, &#39;UTF-8&#39;);
        $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, &#39;UTF-8&#39;);
      for ($i=0; $i < $intGnameLength; $i++) {
        $strOne = mb_substr($gname, $i, 1, &#39;UTF-8&#39;);
        $arrIndex[$strOne][] = $gid;
      }
    }
    
    $this->load->library(&#39;iredis&#39;);
    foreach ($arrIndex as $word => $arrGid) {
      foreach ($arrGid as $gid) {
        $this->iredis->setAutoComplate($word, $gid);
      }
    }
    
  }

Wie man Redis bedient


//自动补全功能
  public function setAutoComplate($key, $value)
  {
    $youxikey = &#39;youxi_&#39;.$key;
    $this->sAdd($youxikey, $value);
  }

  //自动补全功能
  public function getAutoComplate($key)
  {
    $youxikey = &#39;youxi_&#39;.$key;
    return $this->sMembers($youxikey);
  }

Das Obige ist eine detaillierte Einführung in die PHP-Redis-Implementierung eines Super-Mini-Volltext-Retrieval-Codebeispiels. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn